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を選択
Application設定
  • Allowed Callback URLsとして、リソースサーバのURLを登録
Allowed Callback URLsとして、リソースサーバのURLを登録
  • 作成後、払い出されたClient IDとClient Secret値を確認
作成後、払い出されたClient IDとClient Secret値を確認
  • API設定
  • Auth0管理画面で、[Applications] > [APIs]をクリック
  • APIを新規作成
  • IdentifierとしてリソースサーバのURLを登録
IdentifierとしてリソースサーバのURLを登録
  • リフレッシュトークン発行のため、Allow Offline Accessを有効化
リフレッシュトークン発行のため、Allow Offline Accessを有効化

確認手順概要

Auth0におけるAuthorization Code Flow及びリフレッシュトークン取得のシーケンスを確認します。確認手順の概要は、以下の通りです。

  • Auth0 /authorizeエンドポイントへ認可コードをリクエスト
  • Auth0による認証画面表示:ユーザ認証を実施
  • 1.で指定したリダイレクト先へ遷移:URLから認可コードを確認
  • Auth0 /oauth/tokenエンドポイントにアクセスし、アクセストークンとIDトークン、リフレッシュトークンを取得
  • 取得したアクセストークンとIDトークンを確認
  • 4.で取得したリフレッシュトークンを利用してAuth0 /oauth/tokenエンドポイントにアクセスし、IDトークンとアクセストークンを再取得
  • 再取得したアクセストークンとIDトークンを確認

確認手順

1. Auth0 /authorizeエンドポイントへ認可コードをリクエスト

Webブラウザにて以下URLへアクセス

https://<YOUR_AUTH0_TENANT_NAME>.<REGION_DOMAIN>.auth0.com/authorize?audience=https://example.com&response_type=code&scope=openid profile email offline_access&client_id=kqapeCKisQFv3ensODztuWSvX4dYzDzz&redirect_uri=https://example.com

補足

  • <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
2. Auth0による認証画面表示:ユーザ認証を実施
Auth0による認証画面表示:ユーザ認証を実施
3. 1.で指定したリダイレクト先へ遷移:URLから認可コードを確認
1.で指定したリダイレクト先へ遷移:URLから認可コードを確認
https://example.com/?code=tpP_z1EYtGiHy4zOb_lysQKfX7n5jkfOjmpJL1NTN1mwA
4. Auth0 /oauth/tokenエンドポイントにアクセスし、アクセストークンとIDトークン、リフレッシュトークンを取得
> curl -X POST --url 'https://<YOUR_AUTH0_TENANT_NAME>.<REGION_DOMAIN>.auth0.com/oauth/token' --header 'content-type: application/x-www-form-urlencoded' --data 'grant_type=authorization_code&client_id=kqapeCKisQFv3ensODztuWSvX4dYzDzz&client_secret=gp2_bmVL-1qgHiZvh5Cv2GwxkLBard8fZD8UBBUYM5AQ5wD-_pfcuSyokX133GSo&code=tpP_z1EYtGiHy4zOb_lysQKfX7n5jkfOjmpJL1NTN1mwA&redirect_uri=https://example.com'

補足

  • 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"
}
5. 取得したアクセストークンとIDトークンを確認

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"
}
IDトークンのデコード結果
{
	"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"
}
6. 4.で取得したリフレッシュトークンを利用してAuth0 /oauth/tokenエンドポイントにアクセスし、IDトークンとアクセストークンを再取得
> curl -X POST --url 'https://<YOUR_AUTH0_TENANT_NAME>.<REGION_DOMAIN>.auth0.com/oauth/token' --header 'content-type: application/x-www-form-urlencoded' --data 'grant_type=refresh_token&client_id=kqapeCKisQFv3ensODztuWSvX4dYzDzz&client_secret=gp2_bmVL-1qgHiZvh5Cv2GwxkLBard8fZD8UBBUYM5AQ5wD-_pfcuSyokX133GSo&refresh_token=v1.MbSfbtTXtsjmFCtSpWdRLHgdH2vgIxTYtLbkOMJoOM70NJW-6iei8gzpSKrfEUJXQRLQ-89EZS_oPicJy2zChr0&redirect_uri=https://example.com'

補足

  • 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
7. 再取得したアクセストークンとIDトークンを確認

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"
}
再取得したIDトークンのデコード結果
{
	"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 担当

月~金 8:45~17:30