トークンの有効期間をスコープ単位で制御する

概要


本ドキュメントでは、アクセス (リフレッシュ) トークンの有効期間をスコープ単位で制御する方法について解説します。


はじめに


Authlete 1.1 では、アクセス (リフレッシュ) トークンの有効期間はサービス (認可サーバー) 単位でのみ設定可能な項目でしたが、Authlete 2.0 以降では、スコープ単位でもトークンの有効期間を設定することが可能となりました。これにより認可サーバーは「write スコープは重要度の高い権限なので、write スコープがリクエストされた場合に払い出されるトークンの有効期限は短くしたい。」といったユースケースにも対応できるようになります。

トークンの有効期間の計算ロジック


別記事「トークンの有効期間の計算ロジック」をご覧ください。

設定


本機能を利用するためには、サービス管理画面上でスコープの属性を設定する必要があります。詳細は「スコープの属性機能」をご覧ください。

実行例


以下の実行例は、複数の条件下で implcit フローをシミュレートしアクセストークンを発行したものになります。尚、サービスの設定は以下の通りとなります。

  • サービスに設定されたアクセストークン有効期間秒数は 86400 秒とする。
  • サービスには read スコープと write スコープが定義されており、各々に設定されたアクセストークン有効期間秒数は以下の通りとする。
    • read スコープに設定されたアクセストークン有効期間秒数は 3600 秒とする。
    • write スコープに設定されたアクセストークン有効期間秒数は 600 秒とする。

1. どのスコープもリクエストされなかった場合

{
  "type":"authorizationIssueResponse",
  "accessTokenDuration":86400,
  "responseContent":"http://localhost:4180/api/mock/redirection/5191537045#access_token=xbNhif-bsWOPyRasrEFUFurBSQUHnarjv6sMz8cSDjg&token_type=Bearer&expires_in=86400&scope=",
  ...
}

=> サービスに設定されたアクセストークン有効期間秒数が利用されていることがわかる。

2. read スコープがリクエストされた場合

{ 
  "type":"authorizationIssueResponse",
  "accessTokenDuration":3600,
  "responseContent":"http://localhost:4180/api/mock/redirection/5191537045#access_token=8ihMgxhMf-HYBy-O2rYVlMHEQD7WcvFGUhaXfP3YZHs&token_type=Bearer&expires_in=3600&scope=read",
  ...
}

=> read スコープに設定されたアクセストークン有効期間秒数が利用されていることがわかる。

3. write スコープがリクエストされた場合

{ 
  "type":"authorizationIssueResponse",
  "accessTokenDuration":600,
  "responseContent":"http://localhost:4180/api/mock/redirection/5191537045#access_token=lZ4rjCLlwDvgO2wgOaXhDhNGMhpUE_yGi3pyTPcHFyU&token_type=Bearer&expires_in=600&scope=write",
  ...
}

=> write スコープに設定されたアクセストークン有効期間秒数が利用されていることがわかる。

4. read スコープと write スコープの両者がリクエストされた場合

{
  "type":"authorizationIssueResponse",
  "accessTokenDuration":600,
  "responseContent":"http://localhost:4180/api/mock/redirection/5191537045#access_token=3zQNzTiX5MUxO1Gy0ZFfD7mhn3U1Cg3Q15rhjNob6uc&token_type=Bearer&expires_in=600&scope=read+write",
  ...
}

=> write スコープに設定されたアクセストークン有効期間秒数が利用されていることがわかる。

How did we do with this article?