跳转到主要内容

Morepath的基本认证策略

项目描述

more.basicauth: Morepath的HTTP基本认证集成

概述

这是一个用于HTTP基本身份验证的Morepath认证扩展。它最初是Morepath的一部分,但由于基本身份验证几乎总是不希望看到的,我们决定将其移动到一个独立的扩展中。

一些优缺点

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 (7.7 kB 查看哈希值)

上传时间 源代码

构建版本

more.basicauth-0.5-py2.py3-none-any.whl (7.9 kB 查看哈希值)

上传时间 Python 2 Python 3

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面