原文地址: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