This example by Microsoft描述了實現OAuth 2.0授權服務器。我正在執行授權代碼授權流程。在下載的示例代碼中,/授權端點每次都要求用戶在登錄時授予權限。由於用戶希望在第一次登錄時只授予一次權限,我應該自己爲每個用戶持久保留還是支持OAuth這是默認的?OAuth 2.0記得授權許可
這種情況下的最佳做法是什麼?
在此先感謝。
This example by Microsoft描述了實現OAuth 2.0授權服務器。我正在執行授權代碼授權流程。在下載的示例代碼中,/授權端點每次都要求用戶在登錄時授予權限。由於用戶希望在第一次登錄時只授予一次權限,我應該自己爲每個用戶持久保留還是支持OAuth這是默認的?OAuth 2.0記得授權許可
這種情況下的最佳做法是什麼?
在此先感謝。
OAuth 2.0規範本身並未提及有關該功能的任何內容。因此,如果您正在使用的授權服務器的實施不具備該功能,那麼您自己必須實施該功能。
爲了實現該功能,你需要存儲有關「誰(用戶)已授予哪些權限(範圍)給誰(客戶端應用程序)」爲用戶和客戶端應用程序的每個組合。另外,爲了避免再次詢問用戶,在向每個組合發出的所有訪問令牌都已過期之後,可能還是希望保留這些信息。
如果我是你,我會添加一個內部API到授權服務器。 API將接收用戶標識和客戶端標識,並返回用戶過去已授予客戶端應用程序的範圍列表。如果有這樣一個API,您可以在生成授權頁面時使用它。
Authlete的 「Granted Scopes API」 就是一個例子。 /api/client/granted_scopes/get API接受subject
和clientId
請求參數並返回如下所示的JSON。
{
"serviceApiKey" : <Service API Key>,
"clientId" : <Client ID>,
"subject" : <User's Unique ID>,
"latestGrantedScopes" : <Scopes granted by the last authorization process>,
"mergedGrantedScopes" : <All the scopes granted so far>,
}
/api/client/granted_scopes/delete API接受subject
和clientId
請求參數,並刪除記錄記住如果有的話。
請注意,授予的範圍API僅適用於專用的Authlete服務器。它在共享的Authlete服務器(api.authlete.com)上不起作用。這是因爲如果API調用者根據需要不調用/api/client/granted_scopes/delete API,垃圾記錄可能會累積,並且此類垃圾記錄會浪費共享存儲。