簡體   English   中英

金字塔身份驗證:為什么有效?

[英]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的值。 此外,在不同的示例中,此變量的名稱也不同。
  • 即使它知道它是用戶名,也如何將其與用戶ID連接起來? 如果之后再運行authenticated_userid(request),它可以工作,但是系統如何將用戶名與用戶ID連接起來? 我沒有看到任何查詢作為Remember()文檔的一部分。

金字塔的安全系統圍繞本金 您的login值是該主體。 由您的代碼決定是否為remember()提供有效的主體名稱; 如果使用填寫在表單中的登錄名作為您的主體,那就太好了。 如果您使用的是電子郵件地址,但使用數據庫主鍵作為主體字符串,則必須自己映射它。

remember()確切功能取決於您的身份驗證策略 這取決於策略,以便從請求中“知道”請求您要求它記住的主體。

如果您使用AuthTktAuthenticationPolicy策略 ,則主體值將存儲在加密簽名的cookie中; 您的下一個響應將添加一個Set-Cookie標頭。 然后,如果該cookie仍然有效且簽名簽出,則下次帶有該cookie的請求進入時,該策略現在“知道”發出該請求的原理。

然后,當該請求嘗試訪問受保護的資源時,Pyramid會看到某個策略正在生效,並向該策略詢問當前經過身份驗證的原則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM