[英]How authorization endpoint knows user is logged in?
我正在為分布式 web 應用程序使用 OAuth2 和 OpenID Connect 實現單點登錄。 授權服務器自行運行。 我已經實現了訪問令牌端點,目前正在嘗試實現授權端點(用於授權代碼流)。
這是我對應該發生的事情的理解
GET http://authserver/authorize?client_id=1&
state=BB&
_________ scope=read_user& ____________
| | redirect_uri=myapp/callback | |
| |----------------------------------------------------------------> | |
| Browser | | AuthServer |
| |<-----------------------------------------------------------------| |
|_________| 302 myapp/callback?code=AAA&state=BB |____________|
此時,瀏覽器只需要使用代碼向訪問令牌端點發出第二次請求,它就會收到訪問令牌。
但是在這一切發生之前,我對授權服務器如何真正知道用戶已登錄感到有些困惑
我將嘗試使用RFC6749 The OAuth 2.0 授權框架來回答您的問題。 請注意,這對 OpenID Connect 有效,因為它是 OAuth 2.0 的擴展
1 授權服務器不應該驗證用戶以某種方式登錄嗎?
授權端點用於與資源所有者交互並獲得授權。 授權服務器必須首先驗證資源所有者的身份。 授權服務器驗證資源所有者的方式(例如,用戶名和密碼登錄,session cookies )超出了本規范的 scope。
在重定向授權服務器對請求執行最終用戶授權之前。 這是以用戶登錄或上述所需機制的形式完成的。 這是實際最終用戶驗證發生的地方。 從您的問題的角度來看,這是登錄。
2 如果在上一步中,假設用戶登錄並從另一台服務器獲取 cookie,那么從授權服務器的角度如何驗證?
我希望您了解有關 cookies 的基礎知識。 它們幫助基於瀏覽器的 web 應用程序在前端和后端之間維護 state。
根據授權服務器配置,可以要求最終用戶將登錄的 state 標記為已記住。 然后你的瀏覽器得到的是一個安全的cookie,它被存儲在瀏覽器中。 這是一個字符串,對最終用戶沒有任何意義,但在后端存在與登錄用戶(例如:- A1 - Bob,A2 - Alex)的相關性(考慮索引鍵)。
因此,下次用戶打開瀏覽器並使用您的應用程序時,授權服務器會獲取帶有授權請求的 cookie。 如果 cookie 沒有過期/失效,授權服務器可以跳過登錄對話框。 正如第一部分所強調的,最終用戶授權是通過 cookie 發生的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.