OAuth 2.0仕様自体には、この機能についての記載はありません。したがって、使用している認証サーバーの実装にこの機能がない場合は、それを実装する必要があります。
この機能を実現するには、に関する情報を格納する必要があります。ユーザーとクライアントアプリケーションの組み合わせごとに、who(ユーザー)がどのユーザーにどのアクセス許可(スコープ)を許可しましたか(クライアントアプリケーション)に関する情報を格納する必要があります。さらに、おそらく、ユーザーに再度尋ねることを避けるために、各組み合わせに発行されたすべてのアクセストークンが期限切れになった後でも、情報を保持したいことがあります。
私があなただったら、認証サーバーに内部APIを追加します。 APIはユーザーIDとクライアントIDを受け取り、過去にユーザーがクライアントアプリケーションに付与したスコープのリストを返します。このようなAPIがある場合は、認証ページを生成するときにそのAPIを使用できます。
はFYI:
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
リクエストパラメータを受け入れ、もしあれば思い出したレコードを削除します。
Granted Scopes APIは、専用のAuthleteサーバーでのみ機能することに注意してください。共有Authleteサーバー(api.authlete.com)では動作しません。 API呼び出し側が必要に応じて/api/client/granted_scopes/delete APIを呼び出さなければガベージレコードが蓄積され、そのようなガベージレコードが共有ストレージを浪費することがあります。