pyramid.authentication

辅助类

class SessionAuthenticationHelper(prefix='auth.')[源代码]

与一起使用的帮助器 security policy 它将用户数据存储在配置的 session

构造函数参数

prefix

在会话中存储身份验证参数时使用的前缀。默认为“auth”。可选的。

authenticated_userid(request)[源代码]

返回存储的userid。

forget(request, **kw)[源代码]

从会话中删除存储的用户ID。

remember(request, userid, **kw)[源代码]

在会话中存储用户ID。

class AuthTktCookieHelper(secret, cookie_name='auth_tkt', secure=False, include_ip=False, timeout=None, reissue_time=None, max_age=None, http_only=False, path='/', wild_domain=True, hashalg='sha512', parent_domain=False, domain=None, samesite='Lax')[源代码]

从“身份验证票证”Cookie获取数据的安全策略的帮助器类。

构造函数参数

secret

用于认证cookie签名的秘密(字符串)。对于提供给Pyramid的所有子系统机密值,该值应该是唯一的(请参见 反对秘密分享的告诫 )必修的。

cookie_name

违约: auth_tkt . 使用的cookie名称(字符串)。可选的。

secure

违约: False . 仅通过安全连接(可选)发送cookie。

include_ip

违约: False . 使请求的IP地址成为cookie中身份验证数据的一部分。可选的。

对于IPv6,不建议使用此选项。这个 mod_auth_tkt 规范未指定如何处理IPv6地址,因此将此选项与IPv6地址结合使用可能会导致不兼容的cookie。它将身份验证票证绑定到该个人的IPv6地址。

timeout

违约: None . 新发行的票证被视为有效的最大秒数。在这段时间之后,票据将过期(有效地注销用户)。如果该值为 None ,车票永不过期。可选的。

reissue_time

违约: None . 如果设置了此参数,则表示由于需要身份验证的请求而自动重新发布身份验证令牌cookie之前必须经过的秒数。持续时间是以自上次颁发身份验证cookie和“now”以来的秒数度量的。如果该值为 0 ,每个需要验证的请求都将重新发布新的票证cookie。

一个好的经验法则:如果您希望基于不活动状态自动过期cookie:设置 timeout 值为1200(20分钟)并设置 reissue_time 价值可能是 timeout 值(120或2分钟)。设置 timeout 值低于 reissue_time 价值,因为如果是这样,门票将永远不会重新发行。然而,这种配置并没有被明确地阻止。

可选的。

max_age

违约: None . 身份验证cookie的最大使用时间(秒)。这与 timeout 因为 timeout 表示包含在cookie中的票证的生存期,而此值表示cookie本身的生存期。设置此值时,cookie的 Max-AgeExpires 设置将被设置,允许认证cookie在浏览器会话之间持续。将此值设置为低于 timeoutreissue_time 尽管没有明确阻止。可选的。

path

违约: / . 验证cookie有效的路径。如果应用程序仅服务于域的一部分,则可能是可取的。可选的。

http_only

违约: False . 通过设置httponly标志将cookie隐藏在javascript中。不是所有浏览器都支持。可选的。

wild_domain

违约: True . 将为通配符域生成身份验证cookie。如果您的网站作为 example.com 这将使下面的网站可以使用cookie example.comwww.example.com . 可选的。

parent_domain

违约: False . 将为当前站点的父域生成身份验证cookie。例如,如果您的网站托管在 www.example.com 将为生成一个cookie .example.com . 如果您有多个站点共享同一个域,这将非常有用。此选项取代 wild_domain 选择权。可选的。

domain

违约: None . 如果提供,将仅为此域设置身份验证cookie。此选项与不兼容 wild_domainparent_domain . 可选的。

hashalg

违约: sha512 (文字字符串)。

python支持的任何哈希算法 hashlib.new() 函数可以用作 hashalg .

AuthtktAuthenticationPolicy的不同实例使用不同的 hashalg 选项不兼容。切换 hashalg 这意味着所有拥有有效cookie的现有用户都需要重新登录。

可选的。

debug

默认值: False 。如果 debugTrue ,将有关各种身份验证步骤结果的消息记录到金字塔调试记录器。在请求支持时,调试输出对于向邮件列表或IRC频道报告非常有用。可选。

samesite

默认值: 'Lax' 。会话Cookie的“samesite”选项。将该值设置为 None 若要关闭同一站点选项,请执行以下操作。可选。

在 2.0 版本发生变更: 默认设置 hashalg 已从 md5sha512

class AuthTicket(secret, userid, ip, tokens=(), user_data='', time=None, cookie_name='auth_tkt', secure=False, hashalg='md5')

此类表示身份验证令牌。您必须输入共享秘密、用户ID和IP地址。可选地,您可以包括标记(字符串列表,表示角色名称)、“用户数据”,这是您在以后的脚本中可以自己使用的任意数据。最后,您可以重写cookie名称和时间戳。

提供所有参数后,使用.cookie_value()生成适当的身份验证票证。

用法:

token = AuthTicket('sharedsecret', 'username',
    os.environ['REMOTE_ADDR'], tokens=['admin'])
val = token.cookie_value()
exception BadTicket(msg, expected=None)

无法分析票证时引发异常。如果我们走得足够远来确定预期的摘要应该是什么,那么就设置了预期的摘要。这在默认情况下不应该显示,但对于调试很有用。

forget(request)[源代码]

返回一组Expires set cookie头,当附加到响应时,将销毁任何现有的auth-tkt cookie

identify(request)[源代码]

返回带有身份验证信息的字典,或者 None 如果没有有效的身份验证附加到 request

static parse_ticket(secret, ticket, ip, hashalg='md5')

解析票据,返回(时间戳、用户ID、令牌、用户数据)。

如果无法分析票据,则 BadTicket 将引发异常并给出解释。

remember(request, userid, max_age=None, tokens=())[源代码]

返回一组set cookie头;当设置为响应时,这些头将表示有效的身份验证票证。

max_age

身份验证cookie的最大使用时间(秒)。设置此值时,cookie的 Max-AgeExpires 设置将被设置,允许认证cookie在浏览器会话之间持续。如果该值为 None , the max_age 提供给助手本身的值将用作 max_age 价值。违约: None .

tokens

将放入auth_kt tokens字段的字符串序列。序列中的每个字符串都必须是python str 类型和必须与regex匹配 ^[A-Za-z][A-Za-z0-9+_-]*$ . 当在请求中找到auth-tkt并解包时,令牌在返回的标识中可用。违约: () .

帮助程序函数

extract_http_basic_credentials(request)[源代码]

用于从给定的 request .

返回A HTTPBasicCredentials 2元组 usernamepassword 属性或 None 如果找不到凭据。

class HTTPBasicCredentials(username, password)
password

字段编号1的别名

username

字段编号0的别名

身份验证策略

新的安全系统已弃用身份验证策略。看见 升级身份验证/授权 了解更多信息。

class AuthTktAuthenticationPolicy(secret, callback=None, cookie_name='auth_tkt', secure=False, include_ip=False, timeout=None, reissue_time=None, max_age=None, path='/', http_only=False, wild_domain=True, debug=False, hashalg='sha512', parent_domain=False, domain=None, samesite='Lax')[源代码]

A Pyramid authentication policy 它从Pyramid“auth ticket”cookie中获取数据。

构造函数参数

secret

用于认证cookie签名的秘密(字符串)。对于提供给Pyramid的所有子系统机密值,该值应该是唯一的(请参见 反对秘密分享的告诫 )必修的。

callback

违约: None . 回调传递了用户ID和请求,预期返回 None 如果用户ID不存在,或者如果用户存在,则为主体标识符序列(可能为空)。如果 callbackNone ,将假定用户ID不存在主体。可选的。

cookie_name

违约: auth_tkt . 使用的cookie名称(字符串)。可选的。

secure

违约: False . 仅通过安全连接(可选)发送cookie。

include_ip

违约: False . 使请求的IP地址成为cookie中身份验证数据的一部分。可选的。

对于IPv6,不建议使用此选项。这个 mod_auth_tkt 规范未指定如何处理IPv6地址,因此将此选项与IPv6地址结合使用可能会导致不兼容的cookie。它将身份验证票证绑定到该个人的IPv6地址。

timeout

违约: None . 新发行的票证被视为有效的最大秒数。在这段时间之后,票据将过期(有效地注销用户)。如果该值为 None ,车票永不过期。可选的。

reissue_time

违约: None . 如果设置了此参数,则表示由于需要身份验证的请求而自动重新发布身份验证令牌cookie之前必须经过的秒数。持续时间是以自上次颁发身份验证cookie和“now”以来的秒数度量的。如果该值为 0 ,每个需要验证的请求都将重新发布新的票证cookie。

一个好的经验法则:如果您希望基于不活动状态自动过期cookie:设置 timeout 值为1200(20分钟)并设置 reissue_time 价值可能是 timeout 值(120或2分钟)。设置 timeout 值低于 reissue_time 价值,因为如果是这样,门票将永远不会重新发行。然而,这种配置并没有被明确地阻止。

可选的。

max_age

违约: None . 身份验证cookie的最大使用时间(秒)。这与 timeout 因为 timeout 表示包含在cookie中的票证的生存期,而此值表示cookie本身的生存期。设置此值时,cookie的 Max-AgeExpires 设置将被设置,允许认证cookie在浏览器会话之间持续。将此值设置为低于 timeoutreissue_time 尽管没有明确阻止。可选的。

path

违约: / . 验证cookie有效的路径。如果应用程序仅服务于域的一部分,则可能是可取的。可选的。

http_only

违约: False . 通过设置httponly标志将cookie隐藏在javascript中。不是所有浏览器都支持。可选的。

wild_domain

违约: True . 将为通配符域生成身份验证cookie。如果您的网站作为 example.com 这将使下面的网站可以使用cookie example.comwww.example.com . 可选的。

parent_domain

违约: False . 将为当前站点的父域生成身份验证cookie。例如,如果您的网站托管在 www.example.com 将为生成一个cookie .example.com . 如果您有多个站点共享同一个域,这将非常有用。此选项取代 wild_domain 选择权。可选的。

domain

违约: None . 如果提供,将仅为此域设置身份验证cookie。此选项与不兼容 wild_domainparent_domain . 可选的。

hashalg

违约: sha512 (文字字符串)。

python支持的任何哈希算法 hashlib.new() 函数可以用作 hashalg .

AuthtktAuthenticationPolicy的不同实例使用不同的 hashalg 选项不兼容。切换 hashalg 这意味着所有拥有有效cookie的现有用户都需要重新登录。

可选的。

debug

违约: False . 如果 debugTrue ,将有关各种身份验证步骤的结果的消息记录到Pyramid调试记录器。调试输出对于在请求支持时向邮件列表或IRC通道报告很有用。

samesite

违约: 'Lax' . 会话cookie的“samesite”选项。将值设置为字符串 'None' 关闭Samesite选项。

在 1.4 版本发生变更: 增加了 hashalg 选项,默认为 sha512 .

在 1.5 版本发生变更: 增加了 domain 选择权。

增加了 parent_domain 选择权。

在 1.10 版本发生变更: 增加了 samesite 选择并默认 'Lax' .

此类的对象实现由 pyramid.interfaces.IAuthenticationPolicy .

authenticated_userid(request)

返回已验证的用户ID或 None .

如果没有注册任何回调,这将与 unauthenticated_userid .

如果A callback 如果回调返回的值不是 None .

effective_principals(request)

从请求派生的有效主体的列表。

这将返回主体列表,至少包括 pyramid.authorization.Everyone 。如果没有经过身份验证的userid,或者 callback 退货 None ,这将是唯一的本金:

return [Everyone]

如果 callback 不会返回 None 并且找到经过身份验证的用户ID,则主体将包括 pyramid.authorization.Authenticated ,即 authenticated_userid 方法返回的主体列表。 callback

extra_principals = callback(userid, request)
return [Everyone, Authenticated, userid] + extra_principals
forget(request)[源代码]

将删除相应cookie的头列表。

remember(request, userid, **kw)[源代码]

接受以下kw参数: max_age=<int-seconds>, `` 标记=<ascii字符串序列>

返回将在响应上设置适当cookie的头列表。

unauthenticated_userid(request)[源代码]

auth-tkt cookie中的用户ID密钥。

class RemoteUserAuthenticationPolicy(environ_key='REMOTE_USER', callback=None, debug=False)[源代码]

A Pyramid authentication policy 它从 REMOTE_USER wsgi环境变量。

构造函数参数

environ_key

违约: REMOTE_USER . wsgi环境中提供用户ID的键。

callback

违约: None . 回调传递了userid和请求,如果userid不存在,则预期返回none;如果用户确实存在,则返回一系列表示组的主体标识符(可能为空)。如果 callback 如果为“无”,则假定用户ID不存在组主体。

debug

违约: False . 如果 debugTrue ,将有关各种身份验证步骤的结果的消息记录到Pyramid调试记录器。调试输出对于在请求支持时向邮件列表或IRC通道报告很有用。

此类的对象实现由 pyramid.interfaces.IAuthenticationPolicy .

authenticated_userid(request)

返回已验证的用户ID或 None .

如果没有注册任何回调,这将与 unauthenticated_userid .

如果A callback 如果回调返回的值不是 None .

effective_principals(request)

从请求派生的有效主体的列表。

这将返回主体列表,至少包括 pyramid.authorization.Everyone 。如果没有经过身份验证的userid,或者 callback 退货 None ,这将是唯一的本金:

return [Everyone]

如果 callback 不会返回 None 并且找到经过身份验证的用户ID,则主体将包括 pyramid.authorization.Authenticated ,即 authenticated_userid 方法返回的主体列表。 callback

extra_principals = callback(userid, request)
return [Everyone, Authenticated, userid] + extra_principals
forget(request)[源代码]

NO-OP REMOTE_USER 不提供忘记用户的协议。这将是特定于应用程序的,可以在其他地方或子类中完成。

remember(request, userid, **kw)[源代码]

NO-OP REMOTE_USER 不提供记住用户的协议。这将是特定于应用程序的,可以在其他地方或子类中完成。

unauthenticated_userid(request)[源代码]

这个 REMOTE_USER 在中找到的值 environ .

class SessionAuthenticationPolicy(prefix='auth.', callback=None, debug=False)[源代码]

A Pyramid 从配置的 session . 要使此身份验证策略工作,您必须遵循 会议 配置一个 session factory .

构造函数参数

prefix

在会话中存储身份验证参数时使用的前缀。默认为“auth”。可选的。

callback

违约: None . 回调传递了用户ID和请求,预期返回 None 如果用户ID不存在,或者如果用户存在,则为主体标识符序列(可能为空)。如果 callbackNone ,将假定用户ID不存在主体。可选的。

debug

违约: False . 如果 debugTrue ,将有关各种身份验证步骤的结果的消息记录到Pyramid调试记录器。调试输出对于在请求支持时向邮件列表或IRC通道报告很有用。

authenticated_userid(request)

返回已验证的用户ID或 None .

如果没有注册任何回调,这将与 unauthenticated_userid .

如果A callback 如果回调返回的值不是 None .

effective_principals(request)

从请求派生的有效主体的列表。

这将返回主体列表,至少包括 pyramid.authorization.Everyone 。如果没有经过身份验证的userid,或者 callback 退货 None ,这将是唯一的本金:

return [Everyone]

如果 callback 不会返回 None 并且找到经过身份验证的用户ID,则主体将包括 pyramid.authorization.Authenticated ,即 authenticated_userid 方法返回的主体列表。 callback

extra_principals = callback(userid, request)
return [Everyone, Authenticated, userid] + extra_principals
forget(request)[源代码]

从会话中删除存储的用户ID。

remember(request, userid, **kw)[源代码]

在会话中存储用户ID。

class BasicAuthAuthenticationPolicy(check, realm='Realm', debug=False)[源代码]

A Pyramid 使用HTTP标准基本身份验证协议对用户进行身份验证的身份验证策略。要使用此策略,您需要提供一个回调,用于根据登录数据源检查提供的用户凭据。

构造函数参数

check

回调函数按位置参数的顺序传递了用户名、密码和请求。预计返回 None 如果用户ID不存在,或者如果用户存在,则为主体标识符序列(可能为空)。

realm

违约: "Realm" . 基本认证领域字符串。通常由浏览器在登录对话框中显示给用户。

debug

违约: False . 如果 debugTrue ,将有关各种身份验证步骤的结果的消息记录到Pyramid调试记录器。调试输出对于在请求支持时向邮件列表或IRC通道报告很有用。

发出挑战

常规浏览器将不会发送用户名/密码凭据,除非它们首先从服务器收到挑战。下面的方法将注册一个视图,每当试图调用导致禁止响应的视图时,该视图将向用户发送基本身份验证质询:

from pyramid.httpexceptions import HTTPUnauthorized
from pyramid.security import forget
from pyramid.view import forbidden_view_config

@forbidden_view_config()
def forbidden_view(request):
    if request.authenticated_userid is None:
        response = HTTPUnauthorized()
        response.headers.update(forget(request))
        return response
    return HTTPForbidden()
authenticated_userid(request)

返回已验证的用户ID或 None .

如果没有注册任何回调,这将与 unauthenticated_userid .

如果A callback 如果回调返回的值不是 None .

effective_principals(request)

从请求派生的有效主体的列表。

这将返回主体列表,至少包括 pyramid.authorization.Everyone 。如果没有经过身份验证的userid,或者 callback 退货 None ,这将是唯一的本金:

return [Everyone]

如果 callback 不会返回 None 并且找到经过身份验证的用户ID,则主体将包括 pyramid.authorization.Authenticated ,即 authenticated_userid 方法返回的主体列表。 callback

extra_principals = callback(userid, request)
return [Everyone, Authenticated, userid] + extra_principals
forget(request)[源代码]

返回挑战标题。这应该附加到一个响应中,以指示需要凭据。

remember(request, userid, **kw)[源代码]

基本身份验证不提供记住用户的协议。每次请求都会发送凭证。

unauthenticated_userid(request)[源代码]

从中分析的用户ID Authorization 请求报头。

class RepozeWho1AuthenticationPolicy(identifier_name='auth_tkt', callback=None)[源代码]

A Pyramid authentication policy 它从 repoze.who 1.x wsgi“API”(即 repoze.who.identity 在wsgi环境中输入)。

构造函数参数

identifier_name

违约: auth_tkt . 这个 repoze.who 执行记住/忘记的插件名称。可选的。

callback

违约: None . 回调通过了 repoze.who 身份和 request ,预计返回 None 如果标识表示的用户不存在,或者如果用户存在,则表示组的主体标识符序列(可能为空)。如果 callback 如果为“无”,则假定用户ID不存在组主体。

此类的对象实现由 pyramid.interfaces.IAuthenticationPolicy .

authenticated_userid(request)[源代码]

返回已验证的用户ID或 None .

如果没有注册任何回调,这将与 unauthenticated_userid .

如果A callback 如果回调返回的值不是 None .

effective_principals(request)[源代码]

从标识派生的有效主体的列表。

这将返回主体列表,至少包括 pyramid.authorization.Everyone 。如果没有标识,或者 callback 退货 None ,这将是唯一的本金。

如果 callback 不会返回 None 并且找到身份,则主体将包括 pyramid.authorization.Authenticated ,即 authenticated_userid 方法返回的主体列表。 callback

forget(request)[源代码]

忘记当前已验证的用户。

返回头,如果包含在响应中,将删除负责跟踪当前用户的cookie。

remember(request, userid, **kw)[源代码]

存储 userid 作为 repoze.who.userid .

身份验证对象 repoze.who 将包含给定的用户ID userid ,并将所有关键字参数作为附加标识键提供。有用的钥匙可能是 max_ageuserdata .

unauthenticated_userid(request)[源代码]

返回 repoze.who.userid 来自检测到的标识的密钥。