原文地址:html
在Pyramid中其实是提供了基础认证的,咱们能够经过以下的方式进行导入:api
from pyramid.authentication import BasicAuthAuthenticationPolicy
而在Pyramid中,将安全系统拆分为认证和权限。这里咱们来看下最简单的HTTP基础认证(BasicAuth Authentication)。
对于第1次使用Pyramid的人来讲,会以为这个框架很复杂,固然这话是至关于使用Django、Flask这样的开发人员来讲的。
在Pyramid中,咱们没法单独使用认证,其须要提供1个权限类一块儿使用,这里咱们导入ACL这个权限控制类:安全
from pyramid.authorization import ACLAuthorizationPolicy
下面咱们来看下完整的代码:app
from pyramid.authentication import BasicAuthAuthenticationPolicy from pyramid.authorization import ACLAuthorizationPolicy from pyramid.config import Configurator from pyramid.httpexceptions import HTTPUnauthorized from pyramid.view import view_config from wsgiref.simple_server import make_server @view_config(name='',renderer='json') def index(request): realm = 'You must tell me your measurements or I know you are an adult' if not req.authenticated_userid: return HTTPUnauthorized(headers=[('WWW-Authenticate', 'Basic realm="%s"' % realm)]) return {'data':'some data require authenticated.'} def callback(username,pwd,req): users = { 'zhangsan':'123456', 'lisi':'111111', 'wangwu':'888888' } passwd = users.get(username) if passwd == pwd: return True return None
经过这么近20行的代码,咱们已经实现了1个简单的HTTP版本的基础认证。在这里,当认证不经过的时候,咱们须要在响应头中返回WWW-Authenticate
才会出现相似以下的界面:框架
而后接下来是配置的部分了:函数
config = Configurator() basic_policy = BasicAuthAuthenticationPolicy(callback) auth_polocy = ACLAuthorizationPolicy() config.set_authentication_policy(basic_policy) config.set_authorization_policy(auth_polocy) config.scan() app = config.make_wsgi_app() server = make_server('127.0.0.1',8000,app) server.serve_forever()
在这里咱们经过实例化Configurator生成1个配置对象。而后咱们经过set_authentication_policy
和set_authorization_policy
方法分别设置认证策略和权限策略。
在Pyramid中,wsgi应用是经过配置对象的make_wsgi_app
方法生成的。
须要注意的是,在这里,咱们在BasicAuthAuthenticationPolicy
类中传入了1个函数的名称,用于回调处理来判断其认证是否成功。若是是自定义认证类,咱们是能够在失败的时候返回False的,对于系统内建的基础认证类,咱们在回调时只能返回None。
上述的写法只是Pyramid中的1种方式,咱们还能够经过其余的方式来实现相同的效果。虽然,第1次使用pyramid的时候,会以为不怎么顺手,可是随着深刻学习,你会发现Pyramid其实仍是挺灵活的,只是相比Flask、Django这样的框架要写的代码会更多一些。
最后,在实例化BasicAuthAuthenticationPolicy
类时,咱们还能够传入参数debug来开启这个认证类的调试,其结果将记录到日志中。 学习
参考文章:ui