国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python使用htpasswd實現基本認證授權的例子

2020-02-23 05:26:59
字體:
來源:轉載
供稿:網友

前面我講解了如何將樹莓派(Raspberry Pi)打造成無線路由,感覺每次通過命令ssh管理顯麻煩,于是自己動手編寫Web界面,主要是使用Python編寫的CGI程序,這里用到了mini_httpd這款輕量的Web服務器,本來想裝nginx的,但是想想還是精簡一些吧,畢竟資源有限,況且Web管理界面僅我一個人訪問。

CGI應用跑起來了,但問題來了,如何實現普通路由的那種打開頁面就彈出輸入用戶名密碼的對話框?

這里主要用到HTTP協議的一個知識,那就是HTTP基本認證。

服務器端通過發送類似下面的頭信息來實現需要認證請求:
代碼如下:
HTTP/1.0 401 Authorization Required
WWW-Authenticate: Basic realm="Secure Area"
Content-Type: text/html
針對上述要求,于是我在CGI中采用了如下的Python代碼:
代碼如下:
def check_login():
    import base64

    if "Authorization" in os.environ:
    try:
        cred = base64.b64decode(os.environ['Authorization'].split(' ')[1])
        username, password = cred.split(":")
        if db_validate_user(username, password): # 這里匹配數據庫用戶名密碼
        return True
    except:
        pass

    print 'Status: 401 Unauthorized'
    print 'Pragma: no-cache'
    print 'Content-Type: text/html'
    print 'WWW-Authenticate: Basic realm=/"My Wireless Router/"'
    print
    print """
    <html>
    <head>
        <title>Not authenticated</title>
    </head>
    <body>
    <h1>Not authenticated.</h1>
    </body>
    </html>"""
    return False

# 調用
if not check_login():
    sys.exit(0)
但是實際操作下來后發現mini_httpd并不轉發來自用戶的Authorization的用戶名和密碼,也就是說os.environ取不到這個頭信息,從而導致認證失敗。

經過網上搜索后得知mini_httpd原生支持通過.htpasswd實現簡單認證的技術,也就是說我們可以在需要授權訪問的目錄下建立.htpasswd文件實現,當然這個文件是有格式要求的,我們可以通過htpasswd命令來創建。這個命令一般Apache服務器軟件會自帶,不過mini_httpd也自帶了,所以你可以直接使用這個命令。
代碼如下:
#        建立文件名 賬戶名 密碼
htpasswd -bc .htpasswd admin 123456

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 镇巴县| 介休市| 犍为县| 荔浦县| 泸西县| 湾仔区| 贺州市| 永善县| 闸北区| 百色市| 乌兰浩特市| 云梦县| 高阳县| 罗江县| 丽水市| 雅安市| 安徽省| 新丰县| 醴陵市| 榕江县| 兴义市| 长寿区| 洛南县| 年辖:市辖区| 英山县| 武鸣县| 石河子市| 玉田县| 阿勒泰市| 江永县| 响水县| 民乐县| 石台县| 施甸县| 永宁县| 廊坊市| 博白县| 格尔木市| 桂阳县| 馆陶县| 凤台县|