リフレッシュトークン
Auth0は、認証要求に応えてアクセストークンまたはIDトークンを発行します。アクセストークンを使うと、セキュアなAPIへの認証済み呼び出しができます。IDトークンには、ユーザープロファイル属性がクレーム形式で含まれています。両方ともJSON Web Token(JWT)なので、exp
クレームを使用して有効期限が示され、署名などのセキュリティ対策が講じられています。通常は、ユーザーがリソースに初めてアクセスするか、または前に付与されたアクセストークンの期限が切れた場合に、新しいアクセストークンが必要になります。
OAuthのリフレッシュトークンは資格情報アーティファクトであり、OAuthは、これを使うことでユーザーによる介入なしに新しいアクセストークンを取得することができます。その結果、認可サーバーはセキュリティの強化を目的にアクセストークンの有効期間を短くでき、アクセストークンの期限が切れてもユーザーの操作を必要としません。リフレッシュトークンがDenyList(拒否リスト)に載るまでは、新しいアクセストークンを要求できます。
資格情報を安全・確実に管理するために、リフレッシュトークンの数を妥当に管理できる範囲内に抑えることが大切です。リフレッシュトークンによってユーザーをほぼ永続的に認証済みの状態で維持できるため、アプリケーションはリフレッシュトークンを安全に保管しなければなりません。
オフラインアクセス
ユーザーがオフラインでリフレッシュトークンを取得できるようにするには、[API Settings(APIの設定)]にある[Allow Offline Access(オフラインアクセスの許可)]を選択します。
セキュリティはリフレッシュトークンのローテーションを利用して強化できます。この機能は、Auth0に新しいアクセストークンが要求されると、新しいリフレッシュトークンを発行し、同時に前のトークンを無効にします。リフレッシュトークンをローテーションすることで、リフレッシュトークンの不正使用のリスクを減らします。
制限事項
Auth0では、有効なリフレッシュトークンの数をユーザーあたり・アプリケーションあたり200に制限しています。この制限は有効なトークンのみに適用されます。制限数に達した状態で新しいトークンが作成されると、システムは、該当するユーザーとアプリケーションを対象として、最も古いトークンを取り消し、削除します。取り消されたトークンや期限の切れたトークンは、制限数にカウントされません。トークンの過度な使用を防ぐための推奨事項やベストプラクティスについては、「トークンのベストプラクティス」をお読みください。
OIDCフラグの有効化
リフレッシュトークンの動作は、OIDC標準に準拠したアプリケーションに適用されます。アプリケーションは、以下のいずれかの方法でOIDC標準に準拠させることができます。
アプリの[OIDC Conformant(OIDC準拠)]フラグを有効にする
audience
クレームをAuthentication APIの/authorize
エンドポイントに渡す
SDKサポート
Webアプリの場合
Auth0のSDKは、次のようなリフレッシュトークンをサポートしています。
Node.js
ASP.NET Core
PHP
Java
全リストは、Quickstartsをご覧ください。
シングルページアプリの場合
シングルページアプリ(SPA)で安全な認証を提供する過程には、アプリケーションのユースケースによって数々の課題が伴います。Intelligent Tracking Prevention(ITP)を始めとするブラウザーの新しいプライバシー保護機能が、サードパーティーCookieへのアクセスを阻止するため、SPAでのユーザーエクスペリエンスに悪影響が及びます。
Auth0では、リフレッシュトークンローテーションの使用を推奨しています。リフレッシュトークンローテーションは、SPAでリフレッシュトークンを安全に使用するためのセキュリティ方式であり、リソースにアクセスするエンドユーザーに、ITPのようなブラウザーのプライバシー保護技術に煩わされないシームレスなユーザーエクスペリエンスを提供します。
ネイティブ/モバイルアプリの場合
ネイティブアプリケーションの場合は、リフレッシュトークンが認証エクスペリエンスを大幅に改善します。ユーザーは、Web認証を通じて1回だけ認証する必要があります。その後の再認証は、リフレッシュトークンを使い、ユーザーによる介入なしで行われます。
モバイルSDKでリフレッシュトークンを使用する方法の詳細は、以下を参照してください。
Lock Android: Refresh JWT Tokens(Lock Android:JWTトークンのリフレッシュ)
Lock iOS: Save and Renew JWT Tokens(Lock iOS: JWTトークンの保存と更新)