簡體   English   中英

授權端點如何知道用戶已登錄?

[英]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                           |____________|


此時,瀏覽器只需要使用代碼向訪問令牌端點發出第二次請求,它就會收到訪問令牌。

但是在這一切發生之前,我對授權服務器如何真正知道用戶已登錄感到有些困惑

  1. 授權服務器不應該驗證用戶以某種方式登錄嗎?
  2. 如果在上一步中,假設用戶登錄並從另一台服務器獲取 cookie,那么如何從授權服務器的角度進行驗證? 服務器如何知道請求代碼的用戶是 John 而不是 Bob 或匿名用戶?

我將嘗試使用RFC6749 The OAuth 2.0 授權框架來回答您的問題。 請注意,這對 OpenID Connect 有效,因為它是 OAuth 2.0 的擴展

1 授權服務器不應該驗證用戶以某種方式登錄嗎?

3.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.

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