Python使用htpasswd实现基本认证授权的例子
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python使用htpasswd实现基本认证授权的例子,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2757字,纯文字阅读大概需要4分钟。
内容图文
![Python使用htpasswd实现基本认证授权的例子](/upload/InfoBanner/zyjiaocheng/433/ccef931ab81547c09aa670d060277777.jpg)
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 """
Not authenticated.
"""
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
当一个目录下有.htpasswd文件时,mini_httpd就会弹出要求用户名和密码的对话框,输入正确后才可以浏览,如果没有这个文件则正常浏览。
因为我的cgi应用是基于Python的,所以我希望Python能够管理.htpasswd文件,幸好Python世界里有现成的库,避免了我们重复造轮子,使用easy_install的安装方式如下:
sudo easy_install htpasswd
官方文档给出的例子如下,感觉操作挺方便的,大家可以试一试:
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
内容总结
以上是互联网集市为您收集整理的Python使用htpasswd实现基本认证授权的例子全部内容,希望文章能够帮你解决Python使用htpasswd实现基本认证授权的例子所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。