Morepath的基本认证策略
项目描述
more.basicauth: Morepath的HTTP基本认证集成
概述
这是一个用于HTTP基本身份验证的Morepath认证扩展。它最初是Morepath的一部分,但由于基本身份验证几乎总是不希望看到的,我们决定将其移动到一个独立的扩展中。
一些优缺点
以下内容反对基本身份验证:http://adrianotto.com/2013/02/why-http-basic-auth-is-bad
但以下内容支持基本身份验证:https://www.rdegges.com/2015/why-i-love-basic-auth
Morepath的替代认证扩展包括
more.jwtauth:使用JSON Web Token (JWT)的基于令牌的身份验证系统。
more.isdangerous:使用isdangerous的基于cookie的身份策略。
简介
基本身份验证在多个方面都很特殊
触发基本身份验证的HTTP响应状态是未授权(401),而不是默认的禁止(403)。这需要在每次登录失败时发送回浏览器,以便浏览器请求用户输入用户名和密码。
用户名和密码组合会由浏览器自动发送到服务器;不需要在响应中设置某种类型的cookie。因此 remember_identity 什么也不做。
在使用基本身份验证的情况下,没有一种通用的方法可以让Web应用触发注销。因此 forget_identity 也不起作用。
当Morepath引发403状态时,我们可以使用异常视图来触发401状态,如下所示
from webob.exc import HTTPForbidden @App.view(model=HTTPForbidden) def make_unauthorized(self, request): @request.after def set_status_code(response): response.status_code = 401 return "Unauthorized"
对于登录代码,由于 remember_identity 不可用,您只需检查密码
# check whether user has password, using password hash and database if not user_has_password(username, password): return "Sorry, login failed" # or something more fancy
请注意,user_has_password 代表您用于检查用户密码的任何方法;它不是Morepath的一部分。
用法
这里是一个基本设置的完整示例
import morepath from more.basicauth import BasicAuthIdentityPolicy from webob.exc import HTTPForbidden class App(morepath.App): pass @App.identity_policy() def get_identity_policy(): return BasicAuthIdentityPolicy() @App.verify_identity() def verify_identity(identity): # Do the password validation. return user_has_password(identity.username, identity.password) @App.view(model=HTTPForbidden) def make_unauthorized(self, request): @request.after def set_status_code(response): response.status_code = 401 return "Unauthorized"
登录表单可能看起来像这样
from webob.exc import HTTPProxyAuthenticationRequired class Login: pass @App.path(model=Login, path='login') def get_login(): return Login() @App.view(model=Login, request_method='POST') def login(self, request): username = request.POST['username'] password = request.POST['password'] # Do the password validation. if not user_has_password(username, password): raise HTTPProxyAuthenticationRequired('Invalid username/password') return "You're logged in." # or something more fancy
要求
Python(3.4、3.5、3.7、3.8)
morepath(>= 0.19)
更改
0.5 (2020-04-26)
已删除:删除了对Python 2的支持。
如果您想使用此版本,必须升级到Python 3。
删除了对Python 3.3的支持,并添加了对Python 3.5、3.6、3.7和PyPy 3.6的支持。
将Python 3.7设为默认测试环境。
添加了对Black代码格式的集成。
0.4 (2016-10-21)
我们现在使用virtualenv和pip来设置开发环境,并在README中相应地添加了开发部分。
0.3 (2016-07-20)
升级到Morepath 0.15。
为Python 3.5添加testenv并将其设为默认测试环境。
将作者更改为“Morepath开发者”。
整理分类器。
0.2 (2016-04-25)
升级到Morepath 0.14。
对buildout设置工作流程进行了一些小的改进。
0.1 (2016-04-16)
从Morepath中提取基本身份验证。
如果用户无法识别,则返回NO_IDENTITY而不是None。
在测试中将类‘app’替换为‘App’。
添加了登录测试。
增强文档。
项目详情
more.basicauth-0.5.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b6f6cc077d18acd4ab0497fb8a76ed28d996ad7218a9824cd975b96944c94ccc |
|
MD5 | 33ceeda360a5381c05c7cd68f2a13314 |
|
BLAKE2b-256 | d5265b736a3da38488b04321134d3a7b3094957e33747287b9f1941fa72e944f |
more.basicauth-0.5-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8dcbc97b6a0bc36619fd16a36f8181d45be049c62a74b2eec0270e898c76ec2c |
|
MD5 | 1d245cceb7ae04ccf081aa751e0cbfd1 |
|
BLAKE2b-256 | 642b74ca4e859030769420674c7e07f146afa39e3758e06cc40c7fc4009c5413 |