使用 cornice 的简单身份验证和 ACL
simple Authentication and ACL using cornice
我有一个RESTfulAPI写在金字塔/cornice。它为 Ember 客户端提供了 API。
我遵循了 cornice tutorial 并且有一个 valid_token
验证器,我在许多视图中使用它作为资源方法 类.
def valid_token(request):
header = 'Authorization'
token = request.headers.get(header)
if token is None:
request.errors.add('headers', header, "Missing token")
request.errors.status = 401
return
session = DBSession.query(Session).get(token)
if not session:
request.errors.add('headers', header, "invalid token")
request.errors.status = 401
request.validated['session'] = session
现在我想开始有选择地保护资源。 The Pyramid way 似乎要注册 authentication/authorization 政策。 ACLAuthorizationPolicy
似乎提供了对金字塔中漂亮的 ACL 工具的访问。但是,金字塔似乎需要身份验证和授权策略才能发挥作用。由于我正在使用我的验证器进行身份验证,这让我很困惑。
我可以在使用 cornice valid_token
验证器进行身份验证时使用 ACL 来控制授权吗?我需要注册金字塔身份验证或授权策略吗?
我有点迷茫,在金字塔中使用ACL的经验很少。
这不是一个简单的问题:)
很快:
- 您在验证器中实现的内容已由 Pyramid 和 AuthenticationPolicy 处理
- 开始使用您的自定义回调 (see code) 设置
SessionAuthenticationPolicy
- 此
authn
设置完成后,您将获得那些 401
响应,以及 request.authenticated_userid
属性中的 session
值。您还可以在 request.registry
对象中自定义内容。
保留验证器的唯一原因是如果您想 return invalid token
响应中的 invalid token
消息。但是为此,您可以定义自定义 401 金字塔视图(使用 @forbidden_view_config
)
完成后,您可以为您的视图设置自定义授权。您可以在此处的 Cliquet 第一个版本中找到一个非常简单的示例:authz code and view perm
祝你好运!
你可能想做这样的事情:
from pyramid.authentication import SessionAuthenticationPolicy
from pyramid.authorization import ACLAuthorizationPolicy
from your_module import valid_token
authn_policy = SessionAuthenticationPolicy(debug=True, callback=valid_token)
authz_policy = ACLAuthorizationPolicy()
config = Configurator(authentication_policy=authn_policy,authorization_policy=authz_policy)
当然在配置中会收到其他参数,如 settigns,locale_negociator,......
希望这会有所帮助
我有一个RESTfulAPI写在金字塔/cornice。它为 Ember 客户端提供了 API。
我遵循了 cornice tutorial 并且有一个 valid_token
验证器,我在许多视图中使用它作为资源方法 类.
def valid_token(request):
header = 'Authorization'
token = request.headers.get(header)
if token is None:
request.errors.add('headers', header, "Missing token")
request.errors.status = 401
return
session = DBSession.query(Session).get(token)
if not session:
request.errors.add('headers', header, "invalid token")
request.errors.status = 401
request.validated['session'] = session
现在我想开始有选择地保护资源。 The Pyramid way 似乎要注册 authentication/authorization 政策。 ACLAuthorizationPolicy
似乎提供了对金字塔中漂亮的 ACL 工具的访问。但是,金字塔似乎需要身份验证和授权策略才能发挥作用。由于我正在使用我的验证器进行身份验证,这让我很困惑。
我可以在使用 cornice valid_token
验证器进行身份验证时使用 ACL 来控制授权吗?我需要注册金字塔身份验证或授权策略吗?
我有点迷茫,在金字塔中使用ACL的经验很少。
这不是一个简单的问题:)
很快:
- 您在验证器中实现的内容已由 Pyramid 和 AuthenticationPolicy 处理
- 开始使用您的自定义回调 (see code) 设置
SessionAuthenticationPolicy
- 此
authn
设置完成后,您将获得那些401
响应,以及request.authenticated_userid
属性中的session
值。您还可以在request.registry
对象中自定义内容。
保留验证器的唯一原因是如果您想 return invalid token
响应中的 invalid token
消息。但是为此,您可以定义自定义 401 金字塔视图(使用 @forbidden_view_config
)
完成后,您可以为您的视图设置自定义授权。您可以在此处的 Cliquet 第一个版本中找到一个非常简单的示例:authz code and view perm
祝你好运!
你可能想做这样的事情:
from pyramid.authentication import SessionAuthenticationPolicy
from pyramid.authorization import ACLAuthorizationPolicy
from your_module import valid_token
authn_policy = SessionAuthenticationPolicy(debug=True, callback=valid_token)
authz_policy = ACLAuthorizationPolicy()
config = Configurator(authentication_policy=authn_policy,authorization_policy=authz_policy)
当然在配置中会收到其他参数,如 settigns,locale_negociator,......
希望这会有所帮助