pyramid.authentication
¶
辅助类¶
- class SessionAuthenticationHelper(prefix='auth.')[源代码]¶
与一起使用的帮助器 security policy 它将用户数据存储在配置的 session 。
构造函数参数
prefix
在会话中存储身份验证参数时使用的前缀。默认为“auth”。可选的。
- 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-Age
和Expires
设置将被设置,允许认证cookie在浏览器会话之间持续。将此值设置为低于timeout
或reissue_time
尽管没有明确阻止。可选的。path
违约:
/
. 验证cookie有效的路径。如果应用程序仅服务于域的一部分,则可能是可取的。可选的。http_only
违约:
False
. 通过设置httponly标志将cookie隐藏在javascript中。不是所有浏览器都支持。可选的。wild_domain
违约:
True
. 将为通配符域生成身份验证cookie。如果您的网站作为example.com
这将使下面的网站可以使用cookieexample.com
如www.example.com
. 可选的。parent_domain
违约:
False
. 将为当前站点的父域生成身份验证cookie。例如,如果您的网站托管在www.example.com
将为生成一个cookie.example.com
. 如果您有多个站点共享同一个域,这将非常有用。此选项取代wild_domain
选择权。可选的。domain
违约:
None
. 如果提供,将仅为此域设置身份验证cookie。此选项与不兼容wild_domain
和parent_domain
. 可选的。hashalg
违约:
sha512
(文字字符串)。python支持的任何哈希算法
hashlib.new()
函数可以用作hashalg
.AuthtktAuthenticationPolicy的不同实例使用不同的
hashalg
选项不兼容。切换hashalg
这意味着所有拥有有效cookie的现有用户都需要重新登录。可选的。
debug
默认值:
False
。如果debug
是True
,将有关各种身份验证步骤结果的消息记录到金字塔调试记录器。在请求支持时,调试输出对于向邮件列表或IRC频道报告非常有用。可选。samesite
默认值:
'Lax'
。会话Cookie的“samesite”选项。将该值设置为None
若要关闭同一站点选项,请执行以下操作。可选。在 2.0 版本发生变更: 默认设置
hashalg
已从md5
至sha512
。- 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)¶
无法分析票证时引发异常。如果我们走得足够远来确定预期的摘要应该是什么,那么就设置了预期的摘要。这在默认情况下不应该显示,但对于调试很有用。
- static parse_ticket(secret, ticket, ip, hashalg='md5')¶
解析票据,返回(时间戳、用户ID、令牌、用户数据)。
如果无法分析票据,则
BadTicket
将引发异常并给出解释。
- remember(request, userid, max_age=None, tokens=())[源代码]¶
返回一组set cookie头;当设置为响应时,这些头将表示有效的身份验证票证。
max_age
身份验证cookie的最大使用时间(秒)。设置此值时,cookie的
Max-Age
和Expires
设置将被设置,允许认证cookie在浏览器会话之间持续。如果该值为None
, themax_age
提供给助手本身的值将用作max_age
价值。违约:None
.tokens
将放入auth_kt tokens字段的字符串序列。序列中的每个字符串都必须是python
str
类型和必须与regex匹配^[A-Za-z][A-Za-z0-9+_-]*$
. 当在请求中找到auth-tkt并解包时,令牌在返回的标识中可用。违约:()
.
帮助程序函数¶
身份验证策略¶
新的安全系统已弃用身份验证策略。看见 升级身份验证/授权 了解更多信息。
- 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不存在,或者如果用户存在,则为主体标识符序列(可能为空)。如果callback
是None
,将假定用户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-Age
和Expires
设置将被设置,允许认证cookie在浏览器会话之间持续。将此值设置为低于timeout
或reissue_time
尽管没有明确阻止。可选的。
path
违约:
/
. 验证cookie有效的路径。如果应用程序仅服务于域的一部分,则可能是可取的。可选的。
http_only
违约:
False
. 通过设置httponly标志将cookie隐藏在javascript中。不是所有浏览器都支持。可选的。
wild_domain
违约:
True
. 将为通配符域生成身份验证cookie。如果您的网站作为example.com
这将使下面的网站可以使用cookieexample.com
如www.example.com
. 可选的。
parent_domain
违约:
False
. 将为当前站点的父域生成身份验证cookie。例如,如果您的网站托管在www.example.com
将为生成一个cookie.example.com
. 如果您有多个站点共享同一个域,这将非常有用。此选项取代wild_domain
选择权。可选的。
domain
违约:
None
. 如果提供,将仅为此域设置身份验证cookie。此选项与不兼容wild_domain
和parent_domain
. 可选的。
hashalg
违约:
sha512
(文字字符串)。python支持的任何哈希算法
hashlib.new()
函数可以用作hashalg
.AuthtktAuthenticationPolicy的不同实例使用不同的
hashalg
选项不兼容。切换hashalg
这意味着所有拥有有效cookie的现有用户都需要重新登录。可选的。
debug
违约:
False
. 如果debug
是True
,将有关各种身份验证步骤的结果的消息记录到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
- 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
. 如果debug
是True
,将有关各种身份验证步骤的结果的消息记录到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
- class SessionAuthenticationPolicy(prefix='auth.', callback=None, debug=False)[源代码]¶
A Pyramid 从配置的 session . 要使此身份验证策略工作,您必须遵循 会议 配置一个 session factory .
构造函数参数
prefix
在会话中存储身份验证参数时使用的前缀。默认为“auth”。可选的。
callback
违约:
None
. 回调传递了用户ID和请求,预期返回None
如果用户ID不存在,或者如果用户存在,则为主体标识符序列(可能为空)。如果callback
是None
,将假定用户ID不存在主体。可选的。
debug
违约:
False
. 如果debug
是True
,将有关各种身份验证步骤的结果的消息记录到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
- class BasicAuthAuthenticationPolicy(check, realm='Realm', debug=False)[源代码]¶
A Pyramid 使用HTTP标准基本身份验证协议对用户进行身份验证的身份验证策略。要使用此策略,您需要提供一个回调,用于根据登录数据源检查提供的用户凭据。
构造函数参数
check
回调函数按位置参数的顺序传递了用户名、密码和请求。预计返回
None
如果用户ID不存在,或者如果用户存在,则为主体标识符序列(可能为空)。
realm
违约:
"Realm"
. 基本认证领域字符串。通常由浏览器在登录对话框中显示给用户。
debug
违约:
False
. 如果debug
是True
,将有关各种身份验证步骤的结果的消息记录到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
- 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
。