我有一个用金字塔/ RESTful编写的科尼丝 API。它为Ember客户机提供了一个API。
我遵循了科尼斯教程,并拥有一个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现在我想开始有选择地保护资源。金字塔方式似乎是注册身份验证/授权策略。ACLAuthorizationPolicy似乎提供了对金字塔中漂亮的ACL工具的访问。然而,金字塔似乎需要同时使用身份验证和授权策略。因为我用我的验证器进行身份验证,这让我很困惑。
我可以使用ACL来控制授权,同时使用我的valid_token验证器进行身份验证吗?是否需要注册金字塔身份验证或授权策略?
我有点困惑,几乎没有在金字塔中使用ACL的经验。
发布于 2015-09-11 13:14:20
这不是一个容易的问题:)
短期内:
authn设置,您将得到这些401响应,以及request.authenticated_userid属性中的session值。您还可以在request.registry对象中自定义内容。保留验证器的唯一原因是如果您想在invalid token响应中返回401消息。但是,您可以定义自定义401金字塔视图(使用@forbidden_view_config)。
一旦您有了它,您就可以为您的视图设置一个自定义授权。您可以在这里找到一个非常简单的例子:authz码和视图烫发。
祝好运!
发布于 2015-09-11 13:33:59
你可能想做这样的事情:
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、.
希望这能帮上忙
https://stackoverflow.com/questions/32522510
复制相似问题