Okta
オクタ
はじめに
Auth0では、OAuth2.0(RFC6749)で定義されているAuthorization Code Flow、Authorization Code Flow with PKCE(Proof Key for Code Exchange)やImplicit Flow等、各種認証認可フローに対応しています。Auth0及びAuth0で提供されるSDKの利用により、各フローを容易に実装できます。
本ページでは、Authentication Code Flow(RFC6749 4.1)を例として、Auth0利用時におけるリフレッシュトークン取得、リフレッシュトークンを利用したアクセストークン/IDトークン再取得のシーケンスを確認します。確認にあたり、必要となるAuth0設定とアクセストークン/IDトークン再取得までの具体的な手続きをご紹介します。
前提
本ページ記載の機能及び設定に関する内容は、2023年1月現在の情報となります。
Authorization Code Flowにおけるアクセストークン/IDトークン取得については、Auth0におけるAuthorization Code Flow(アクセストークン/IDトークン編)を参照ください。
事前設定
Authorization Code Flowにおけるリフレッシュトークン取得の確認にあたり、Auth0側で必要な事前設定を以下に示します。
本手順では、リソースサーバとして「https://example.com」を指定しますが、実際にはリソースを提供するものではありません。
- Application設定
- Auth0管理画面で、[Applications] > [Applications]をクリック
- Applicationを新規作成
- Single Page Applicationを選択
- Allowed Callback URLsとして、リソースサーバのURLを登録
- 作成後、払い出されたClient IDとClient Secret値を確認
- API設定
- Auth0管理画面で、[Applications] > [APIs]をクリック
- APIを新規作成
- IdentifierとしてリソースサーバのURLを登録
- リフレッシュトークン発行のため、Allow Offline Accessを有効化
確認手順概要
Auth0におけるAuthorization Code Flow及びリフレッシュトークン取得のシーケンスを確認します。確認手順の概要は、以下の通りです。
- Auth0 /authorizeエンドポイントへ認可コードをリクエスト
- Auth0による認証画面表示:ユーザ認証を実施
- 1.で指定したリダイレクト先へ遷移:URLから認可コードを確認
- Auth0 /oauth/tokenエンドポイントにアクセスし、アクセストークンとIDトークン、リフレッシュトークンを取得
- 取得したアクセストークンとIDトークンを確認
- 4.で取得したリフレッシュトークンを利用してAuth0 /oauth/tokenエンドポイントにアクセスし、IDトークンとアクセストークンを再取得
- 再取得したアクセストークンとIDトークンを確認
確認手順
Webブラウザにて以下URLへアクセス
補足
- <YOUR_AUTH0_TENANT_NAME>:Auth0テナント名
- <REGION_DOMAIN>:Auth0テナントリージョン名
- audience=https://example.com:事前設定におけるAPI設定のIdentifier
- response_type=code&scope=openid:Authorization Code Flow利用+IDトークン取得
- scope=offline_access:リフレッシュトークン取得
- client_id:事前設定におけるApplication設定のClient ID
- redirect_uri:認証完了後のリダイレクト先URL
補足
- grant_type=authorization_code:Authorization Code Flow利用
- client_id:事前設定におけるApplication設定のClient ID
- client_secret:事前設定におけるApplication設定のClient Secret
- code:3.で取得した認可コード
{ "access_token":"eyJhbGciOiJSUzI1NiIsInR5cCI6Ikp...(略)...qvVPSppORhoOjSQLj170Q", "refresh_token":"v1.MbSfbtTXtsjmFCtSpWdRLHgd...(略)...QRLQ-89EZS_oPicJy2zChr0", "id_token":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCI...(略)...Bwf8epG61vPgTk5oQ9p7A", "scope":"openid profile email offline_access", "expires_in":86400, "token_type":"Bearer" }
jwt.ioにてアクセストークン、IDトークンをデコード
{ "iss": "<your_auth0_tenant_name>.<region_domain>.auth0.com/", "sub": "auth0|63914fc35f596748bf001439", "aud": [ "https://example.com", "https://<your_auth0_tenant_name>.<region_domain>.auth0.com/userinfo" ], "iat": 1672298378, "exp": 1672384778, "azp": "kqapeCKisQFv3ensODztuWSvX4dYzDzz", "scope": "openid profile email offline_access" }
{ "nickname": "xxxxxxxx", "name": "xxxxxxx@xxxxxxxx.co.jp", "picture": "https://s.gravatar.com/avatar/24b5f30a0fe65625e5afb...(略)...%2Fim.png", "updated_at": "2022-12-27T10:50:42.856Z", "email": "xxxxxxx@xxxxxxxx.co.jp", "email_verified": true, "iss": "https://<your_auth0_tenant_name>.<region_domain>.auth0.com/", "sub": "auth0|63914fc35f596748bf001439", "aud": "kqapeCKisQFv3ensODztuWSvX4dYzDzz", "iat": 1672298378, "exp": 1672334378, "sid": "SqBjbek-b0pWC5zmampoHm4M3Rnl_pVL" }
補足
- grant_type=refresh_token:リフレッシュトークンによるトークン再取得
- client_id:事前設定におけるApplication設定のClient ID
- client_secret:事前設定におけるApplication設定のClient Secret
- refresh_token:4.で取得したリフレッシュトークン
{ "access_token":"eyJhbGciOiJSUzI1NiIsInR5cCI6Ikp...(略)...LhQUVepobZLF3pNP3hsoZw", "refresh_token":"v1.MrSfbtTXtsjmFCtSpWdRLHhIl0...(略)...P8RAU1himNqVxlISqtjn3HQ", "id_token":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCI...(略)...9BpmhD3KWFyVMgR0hGQ", "scope":"openid profile email offline_access", "expires_in":86400, "token_type":"Bearer" }
補足
- リフレッシュトークンのローテーション機能を有効化(デフォルト:有効)することで、リフレッシュトークンを用いてアクセストークンを再取得した際、新たなリフレッシュトークンが返却されます。
Refresh Token Rotation - Auth0 docs
jwt.ioにてアクセストークン、IDトークンをデコードし、発行(iatクレーム)と有効期限(expクレーム)が5.の確認結果と異なることを確認
{
"iss": "https://<your_auth0_tenant_name>.<region_domain>.auth0.com/",
"sub": "auth0|63914fc35f596748bf001439",
"aud": [
"https://example.com",
"https://<your_auth0_tenant_name>.<region_domain>.auth0.com/userinfo"
],
"iat": 1672298551,
"exp": 1672384951,
"azp": "kqapeCKisQFv3ensODztuWSvX4dYzDzz",
"scope": "openid profile email offline_access"
}
{
"nickname": "xxxxxxxx",
"name": "xxxxxxx@xxxxxxxx.co.jp",
"picture": "https://s.gravatar.com/avatar/24b5f30a0fe65625e5afb...(略)...%2Fim.png",
"updated_at": "2022-12-27T10:50:42.856Z",
"email": "xxxxxxx@xxxxxxxx.co.jp",
"email_verified": true,
"iss": "https://<your_auth0_tenant_name>.<region_domain>.auth0.com/",
"sub": "auth0|63914fc35f596748bf001439",
"aud": "kqapeCKisQFv3ensODztuWSvX4dYzDzz",
"iat": 1672298551,
"exp": 1672334551
}
おわりに
Auth0におけるAuthorization Code Flowの動きとして、リフレッシュトークンによるアクセストークン/IDトークンの再取得までをご紹介しました。Authentication Code Flowの動きとAuth0による実装の理解に役立てていただければ幸いです。
参考
お問い合わせ・資料請求
株式会社マクニカ Okta 担当
- TEL:045-476-2010
- E-mail:okta@macnica.co.jp
平日 9:00~17:00