Pyramid內建基礎認證

原文地址:html

http://52sox.com/pyramid-basi...json

在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纔會出現相似以下的界面:框架

basic-auth

而後接下來是配置的部分了:函數

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_policyset_authorization_policy方法分別設置認證策略和權限策略。
在Pyramid中,wsgi應用是經過配置對象的make_wsgi_app方法生成的。
須要注意的是,在這裏,咱們在BasicAuthAuthenticationPolicy類中傳入了1個函數的名稱,用於回調處理來判斷其認證是否成功。若是是自定義認證類,咱們是能夠在失敗的時候返回False的,對於系統內建的基礎認證類,咱們在回調時只能返回None。
上述的寫法只是Pyramid中的1種方式,咱們還能夠經過其餘的方式來實現相同的效果。雖然,第1次使用pyramid的時候,會以爲不怎麼順手,可是隨着深刻學習,你會發現Pyramid其實仍是挺靈活的,只是相比Flask、Django這樣的框架要寫的代碼會更多一些。
最後,在實例化BasicAuthAuthenticationPolicy類時,咱們還能夠傳入參數debug來開啓這個認證類的調試,其結果將記錄到日誌中。 學習

參考文章:ui

http://docs.pylonsproject.org...spa

相關文章
相關標籤/搜索