2017-09-01 122 views
1

This example by Microsoft描述了實現OAuth 2.0授權服務器。我正在執行授權代碼授權流程。在下載的示例代碼中,/授權端點每次都要求用戶在登錄時授予權限。由於用戶希望在第一次登錄時只授予一次權限,我應該自己爲每個用戶持久保留還是支持OAuth這是默認的?OAuth 2.0記得授權許可

這種情況下的最佳做法是什麼?

在此先感謝。

回答

0

OAuth 2.0規範本身並未提及有關該功能的任何內容。因此,如果您正在使用的授權服務器的實施不具備該功能,那麼您自己必須實施該功能。

爲了實現該功能,你需要存儲有關「誰(用戶)已授予哪些權限(範圍)給誰(客戶端應用程序)」爲用戶和客戶端應用程序的每個組合。另外,爲了避免再次詢問用戶,在向每個組合發出的所有訪問令牌都已過期之後,可能還是希望保留這些信息。

如果我是你,我會添加一個內部API到授權服務器。 API將接收用戶標識和客戶端標識,並返回用戶過去已授予客戶端應用程序的範圍列表。如果有這樣一個API,您可以在生成授權頁面時使用它。


供參考:

Authlete的 「Granted Scopes API」 就是一個例子。 /api/client/granted_scopes/get API接受subjectclientId請求參數並返回如下所示的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接受subjectclientId請求參數,並刪除記錄記住如果有的話。

請注意,授予的範圍API僅適用於專用的Authlete服務器。它在共享的Authlete服務器(api.authlete.com)上不起作用。這是因爲如果API調用者根據需要不調用/api/client/granted_scopes/delete API,垃圾記錄可能會累積,並且此類垃圾記錄會浪費共享存儲。