发布于 2015-09-13 08:07:19 | 226 次阅读 | 评论: 0 | 来源: PHPERZ

认证(Authentication)

Piston通过一个简单的接口支持可插换的认证,自带两种内置的认证机制,分别是 piston.authentication.HttpBasicAuthenticationpiston.authentication.OAuthAuthentication 。 Basic auth handler非常简单,如果我们要编写自有的认证handler,它无疑很有参考价值。

Note: 在apache或nginx下使用 piston.authentication.HttpBasicAuthentication ,须要在服务器或虚拟主机配置时添加 WSGIPassAuthorization On 指令,否则django-piston不会 从 request.METAHTTP_AUTHORIZATION 中读取认证数据。详看: http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIPassAuthorization.

认证Handler必须是一个类,且必须实现 is_authenticatedchallenge 两个方法。

is_authenticated 只接收一个参数,即Django接收的 request 对象的一个拷贝。 该对象包含认证一个用户所需的全部信息,比如 request.META.get('HTTP_AUTHENTICATION').

认证成功之后,该函式必须将 request.user 设为正确的 django.contrib.auth.models.User 对象。 这样做是考虑到随后的handlers要确认是哪个用户已经登录。

该函式必须返回True或False,以表示该用户是否登录成功。

对于认证失败的情况,就交由 challenge 处理。

challenge 不接收任何参数,必须返回一个包含正确cahllenge指令的 HttpResponse 对象。 对于Basic auth来说,该函式返回一个带有 WWW-Authenticate 报头的,状态码为401的空响应(response)。 并通知接收端要提供认证信息。

针对匿名handlers,Piston提供了一个特珠的类: piston.authentication 中的 NoAuthentication 。 该类始终返回 is_authenticated 为 True。

OAuth

OAuth 是首选的认证方式,因为它能分辨消费者”consumers”,也就是说,它能识别使用该API的已认证的应用。 Piston深知和尊重这一点,并对此善加利用,比如当我们使用 @throttle 装饰器时, 它于底层限制每一个消费者应用,维系服务运转,即使当中某个服务已经达到限制配额。

最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务