最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

服務(wù)器端通過發(fā)送類似下面的頭信息來實現(xiàn)需要認(rèn)證請求:

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

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

針對上述要求,于是我在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ù)庫用戶名密碼
        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)

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

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

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

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

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

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

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

sudo easy_install htpasswd

官方文檔給出的例子如下,感覺操作挺方便的,大家可以試一試:
復(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)文章

  • 關(guān)于numpy中矩陣的翻轉(zhuǎn)(flip)

    關(guān)于numpy中矩陣的翻轉(zhuǎn)(flip)

    這篇文章主要介紹了關(guān)于numpy中矩陣的翻轉(zhuǎn)(flip),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • python下載圖片實現(xiàn)方法(超簡單)

    python下載圖片實現(xiàn)方法(超簡單)

    下面小編就為大家?guī)硪黄猵ython下載圖片實現(xiàn)方法(超簡單)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Python中發(fā)布Web應(yīng)用的常見方法與對比

    Python中發(fā)布Web應(yīng)用的常見方法與對比

    這篇文章主要為大家詳細(xì)介紹了Python中發(fā)布?Web?應(yīng)用的幾種常見方法的實現(xiàn)詳細(xì)步驟以及它們的部署方法對比,有需要的小伙伴可以參考下
    2025-02-02
  • 一步步解析Python斗牛游戲的概率

    一步步解析Python斗牛游戲的概率

    這篇文章主要帶著大家一步步解析Python斗牛游戲的概率,計算出斗牛游戲的概率,感興趣的朋友可以參考一下
    2016-02-02
  • 如何從Python的cmd中獲得.py文件參數(shù)

    如何從Python的cmd中獲得.py文件參數(shù)

    這篇文章主要介紹了如何從Python的cmd中獲得.py文件參數(shù)操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • flask-SQLALchemy連接數(shù)據(jù)庫的實現(xiàn)示例

    flask-SQLALchemy連接數(shù)據(jù)庫的實現(xiàn)示例

    sqlalchemy是數(shù)據(jù)庫的orm框架,讓我們操作數(shù)據(jù)庫的時候不要再用sql語句了,本文就介紹了flask-SQLALchemy連接數(shù)據(jù)庫的實現(xiàn)示例,感興趣的可以了解一下
    2022-06-06
  • Python新建項目自動添加介紹和utf-8編碼的方法

    Python新建項目自動添加介紹和utf-8編碼的方法

    這篇文章主要介紹了Python新建項目自動添加介紹和utf-8編碼的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • python raise的基本使用

    python raise的基本使用

    這篇文章主要介紹了python raise的基本使用,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-09-09
  • python實現(xiàn)好看的時鐘效果

    python實現(xiàn)好看的時鐘效果

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)好看的時鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • python通過opencv實現(xiàn)圖片裁剪原理解析

    python通過opencv實現(xiàn)圖片裁剪原理解析

    這篇文章主要介紹了python通過opencv實現(xiàn)圖片裁剪原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01

最新評論

咸宁市| 陆良县| 庆云县| 奉新县| 上饶县| 合肥市| 昔阳县| 苍梧县| 广宗县| 惠东县| 门头沟区| 延安市| 双流县| 桃园县| 玛多县| 五原县| 尤溪县| 乌鲁木齐县| 若尔盖县| 武川县| 龙泉市| 渝北区| 乌恰县| 土默特左旗| 梅州市| 镇康县| 阿合奇县| 商都县| 康保县| 汾阳市| 长岛县| 来安县| 明水县| 桓台县| 都昌县| 连城县| 土默特右旗| 六安市| 沽源县| 玛沁县| 会理县|