欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python使用htpasswd實(shí)現(xiàn)基本認(rèn)證授權(quán)的例子

 更新時(shí)間:2014年06月10日 09:31:24   作者:  
這篇文章主要介紹了Python使用htpasswd實(shí)現(xiàn)基本認(rèn)證授權(quán)的例子,服務(wù)器使用的是mini_httpd,需要的朋友可以參考下

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

CGI應(yīng)用跑起來(lái)了,但問(wèn)題來(lái)了,如何實(shí)現(xiàn)普通路由的那種打開(kāi)頁(yè)面就彈出輸入用戶名密碼的對(duì)話框?

這里主要用到HTTP協(xié)議的一個(gè)知識(shí),那就是HTTP基本認(rèn)證。

服務(wù)器端通過(guò)發(fā)送類似下面的頭信息來(lái)實(shí)現(xiàn)需要認(rèn)證請(qǐng)求:

復(fù)制代碼 代碼如下:

HTTP/1.0 401 Authorization Required
WWW-Authenticate: Basic realm="Secure Area"
Content-Type: text/html

針對(duì)上述要求,于是我在CGI中采用了如下的Python代碼:
復(fù)制代碼 代碼如下:

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): # 這里匹配數(shù)據(jù)庫(kù)用戶名密碼
        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

# 調(diào)用
if not check_login():
    sys.exit(0)

但是實(shí)際操作下來(lái)后發(fā)現(xiàn)mini_httpd并不轉(zhuǎn)發(fā)來(lái)自用戶的Authorization的用戶名和密碼,也就是說(shuō)os.environ取不到這個(gè)頭信息,從而導(dǎo)致認(rèn)證失敗。

經(jīng)過(guò)網(wǎng)上搜索后得知mini_httpd原生支持通過(guò).htpasswd實(shí)現(xiàn)簡(jiǎn)單認(rèn)證的技術(shù),也就是說(shuō)我們可以在需要授權(quán)訪問(wèn)的目錄下建立.htpasswd文件實(shí)現(xiàn),當(dāng)然這個(gè)文件是有格式要求的,我們可以通過(guò)htpasswd命令來(lái)創(chuàng)建。這個(gè)命令一般Apache服務(wù)器軟件會(huì)自帶,不過(guò)mini_httpd也自帶了,所以你可以直接使用這個(gè)命令。

復(fù)制代碼 代碼如下:

#        建立文件名 賬戶名 密碼
htpasswd -bc .htpasswd admin 123456

當(dāng)一個(gè)目錄下有.htpasswd文件時(shí),mini_httpd就會(huì)彈出要求用戶名和密碼的對(duì)話框,輸入正確后才可以瀏覽,如果沒(méi)有這個(gè)文件則正常瀏覽。

因?yàn)槲业腸gi應(yīng)用是基于Python的,所以我希望Python能夠管理.htpasswd文件,幸好Python世界里有現(xiàn)成的庫(kù),避免了我們重復(fù)造輪子,使用easy_install的安裝方式如下:

復(fù)制代碼 代碼如下:

sudo easy_install htpasswd

官方文檔給出的例子如下,感覺(jué)操作挺方便的,大家可以試一試:
復(fù)制代碼 代碼如下:

import htpasswd

with htpasswd.Basic("/path/to/user.db") as userdb:

    try:
        userdb.add("bob", "password")
    except htpasswd.basic.UserExists, e:
        print e
    try:
        userdb.change_password("alice", "newpassword")
    except htpasswd.basic.UserNotExists, e:
        print e

with htpasswd.Group("/path/to/group.db") as groupdb:

    try:
        groupdb.add_user("bob", "admins")
    except htpasswd.group.UserAlreadyInAGroup, e:
        print e
    try:
        groupdb.delete_user("alice", "managers")
    except htpasswd.group.UserNotInAGroup, e:
        print e

相關(guān)文章

  • 淺談python浮點(diǎn)數(shù)比較的三種方法

    淺談python浮點(diǎn)數(shù)比較的三種方法

    在 Python 中,由于浮點(diǎn)數(shù)在計(jì)算機(jī)內(nèi)部的表示方式是二進(jìn)制的,因此進(jìn)行浮點(diǎn)數(shù)比較時(shí)可能會(huì)出現(xiàn)精度問(wèn)題,本文就介紹了三種解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • python?logging模塊的分文件存放詳析

    python?logging模塊的分文件存放詳析

    這篇文章主要介紹了python?logging模塊的分文件存放詳析,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • Python+Turtle繪制可愛(ài)的可達(dá)鴨

    Python+Turtle繪制可愛(ài)的可達(dá)鴨

    一年一度的六一兒童節(jié)又來(lái)了,祝大朋友小朋友節(jié)日快樂(lè)!本文主要介紹如何運(yùn)用Python中的turtle庫(kù)控制函數(shù)繪制可達(dá)鴨,希望你會(huì)喜歡
    2022-05-05
  • 使用keras和tensorflow保存為可部署的pb格式

    使用keras和tensorflow保存為可部署的pb格式

    這篇文章主要介紹了使用keras和tensorflow保存為可部署的pb格式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • Python每天必學(xué)之bytes字節(jié)

    Python每天必學(xué)之bytes字節(jié)

    Python每天必學(xué)之bytes字節(jié),針對(duì)Python中的bytes字節(jié)進(jìn)行學(xué)習(xí)理解,感興趣的小伙伴們可以參考一下
    2016-01-01
  • python實(shí)現(xiàn)坦克大戰(zhàn)

    python實(shí)現(xiàn)坦克大戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)坦克大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 總結(jié)分析Python的5個(gè)硬核函數(shù)

    總結(jié)分析Python的5個(gè)硬核函數(shù)

    今天看到一篇很好的 Python 博文,結(jié)合自己的經(jīng)驗(yàn)總結(jié),分享給大家一篇關(guān)于eval, exec, compile, locals, globals這些函數(shù)的文章
    2021-11-11
  • python在Windows8下獲取本機(jī)ip地址的方法

    python在Windows8下獲取本機(jī)ip地址的方法

    這篇文章主要介紹了python在Windows8下獲取本機(jī)ip地址的方法,涉及Python中socket包相關(guān)函數(shù)的使用技巧,需要的朋友可以參考下
    2015-03-03
  • Python批處理更改文件名os.rename的方法

    Python批處理更改文件名os.rename的方法

    今天小編就為大家分享一篇Python批處理更改文件名os.rename的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Python登錄接口如何獲取token并保存到文件中

    Python登錄接口如何獲取token并保存到文件中

    這篇文章主要介紹了Python登錄接口如何獲取token并保存到文件中問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評(píng)論