[英]Pyramid authentication: Why does it work?
我現在正在我的應用程序中進入身份驗證,並且我可以找到的所有金字塔示例都很好地解釋了簡單的部分,但是對那些對我沒有任何意義的部分進行了手揮手。
大多數示例如下所示:
login = request.params['login']
password = request.params['password']
if USERS.get(login) == password:
headers = remember(request, login)
return HTTPFound(location = came_from,
headers = headers)
從init開始:
session_factory = UnencryptedCookieSessionFactoryConfig(
settings['session.secret']
)
authn_policy = SessionAuthenticationPolicy()
authz_policy = ACLAuthorizationPolicy()
嘗試跟蹤實際發生登錄的時間點,我假設是這樣的:
headers = remember(request, login)
在我看來,這是我們在會話cookie中存儲用戶名。
如果我將此行放在我的應用程序中,則當前用戶已神奇地登錄,但是為什么呢?
金字塔的安全系統圍繞本金 ; 您的login
值是該主體。 由您的代碼決定是否為remember()
提供有效的主體名稱; 如果使用填寫在表單中的登錄名作為您的主體,那就太好了。 如果您使用的是電子郵件地址,但使用數據庫主鍵作為主體字符串,則必須自己映射它。
remember()
確切功能取決於您的身份驗證策略 ; 這取決於策略,以便從請求中“知道”請求您要求它記住的主體。
如果您使用AuthTktAuthenticationPolicy
策略 ,則主體值將存儲在加密簽名的cookie中; 您的下一個響應將添加一個Set-Cookie
標頭。 然后,如果該cookie仍然有效且簽名簽出,則下次帶有該cookie的請求進入時,該策略現在“知道”發出該請求的原理。
然后,當該請求嘗試訪問受保護的資源時,Pyramid會看到某個策略正在生效,並向該策略詢問當前經過身份驗證的原則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.