メインコンテンツへスキップ

はじめに

本ドキュメントでは、アクセス (リフレッシュ) トークンの有効期間をスコープ単位で制御する方法について解説します。
本機能は Authlete 2.0 以降でのみ利用可能になります。

スコープ単位でのトークンの有効期間設定

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

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

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

設定

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

実行例

ここでは、ある 1 つのサービスに 2 つのスコープが設定されている環境において、アクセストークンの有効期間が以下の通り設定されているものとします。
エンティティアクセストークンの有効期間(秒)
サービス86,400
read スコープ3,600
write スコープ600
この状況において、クライアントから送信された、スコープの組み合わせが異なる「インプリシットグラントフローの認可リクエスト」に対し、Authlete の /auth/authorization/issue API は以下のレスポンスを返却します。

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

{
    "type": "authorizationIssueResponse",
    "accessTokenDuration": **86400,**    "responseContent": "https://client.example.org/cb/example.com
        #access_token=xbNhif-bsWOPyRasrEFUFurBSQUHnarjv6sMz8cSDjg
        &token_type=Bearer
        &**expires_in=86400**        &scope=",
    ...
}
=> サービスに設定されたアクセストークン有効期間秒数が利用されていることがわかる。

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

{
    "type": "authorizationIssueResponse",
    **"accessTokenDuration": 3600,**    "responseContent": "https://client.example.org/cb/example.com
                        #access_token=8ihMgxhMf-HYBy-O2rYVlMHEQD7WcvFGUhaXfP3YZHs
                        &token_type=Bearer
                        &**expires_in=3600**                        &**scope=read",**
    ...
}
=> read スコープに設定されたアクセストークン有効期間秒数が利用されていることがわかる。

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

{
    "type": "authorizationIssueResponse",
    **"accessTokenDuration": 600,**    "responseContent": "https://client.example.org/cb/example.com#access_token=lZ4rjCLlwDvgO2wgOaXhDhNGMhpUE_yGi3pyTPcHFyU
    &token_type=Bearer
    &**expires_in=600**    &**scope=write",**    ...
}
=> write スコープに設定されたアクセストークン有効期間秒数が利用されていることがわかる。

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

{
    "type": "authorizationIssueResponse",
    "**accessTokenDuration":600,**    "responseContent": "https://client.example.org/cb/example.com     #access_token=3zQNzTiX5MUxO1Gy0ZFfD7mhn3U1Cg3Q15rhjNob6uc
    &token_type=Bearer
    &**expires\_in=600**    &**scope=read+write,**"    ...
}
=> write スコープに設定されたアクセストークン有効期間秒数が利用されていることがわかる。