はじめに
Auth0にはリフレッシュトークンを発行する機能があります。
本記事ではAuth0のリフレッシュトークンの取得する方法とリフレッシュトークンを使って新しいIDトークンとアクセストークンを取得する方法を紹介します。
リフレッシュトークンの要求方法
Auth0のUniversal Loginを使ってログインする場合、基本的にはSDKの利用有無に関わらず最初に/authorize
エンドポイントへのアクセスを行います。
/authroize
エンドポイントには以下のようにさまざまなパラメーターを設定します。
(Auth0のAPI仕様から転載)
GET https://YOUR_DOMAIN/authorize?
audience=API_IDENTIFIER&
scope=SCOPE&
response_type=code&
client_id=YOUR_CLIENT_ID&
redirect_uri=https://YOUR_APP/callback&
state=STATE
この中のscope
パラメーターにはopenid profile email
というように複数の値がスペース区切りで設定されます。
アプリケーションはscope
パラメーターに自身が必要とする権限を設定しAuth0に問い合わせを行います。
このscope
パラメーターにoffline_access
という値を追加することでログイン完了後にAuth0からリフレッシュトークンが返ってくるようになります。
設定例:scope=openid profile email offline_access
これはOpenID Connectの仕様にも定義されている標準的な手法です。
OpenID Connectの仕様
http://openid-foundation-japan.github.io/openid-connect-core-1_0.ja.html#OfflineAccess
リフレッシュトークンの取得
scope
パラメーターにoffline_access
を入れた状態で/authroize
にアクセスし正常にログインが完了するとAuth0からリフレッシュトークンを含んだレスポンスが返ってきます。
Auth0のSDKを利用する場合でも、オプションパラメーターとして同様にscope
パラメーターにoffline_access
を設定してください。
{
"access_token":"gZI4D........",
"refresh_token":"X0nOzxEX3j..........",
"id_token":"eyJhbGciOiJSU.............",
"token_type":"Bearer",
"expires_in":86400
}
リフレッシュトークンの使い方
Auth0のAPI仕様のとおりにhttpリクエストを行えば新しいIDトークンとアクセストークンを取得できます。
grant_type
パラメーターはrefresh_token
固定です。
SDKを使う場合は大抵専用の関数やメソッドが用意されているのでそちらを利用してください。
POST https://YOUR_DOMAIN/oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&refresh_token=YOUR_REFRESH_TOKEN
{
"access_token": "fFN1LGcv.........",
"id_token": "eyJhbGciOiJSUY................",
"scope": "openid profile email offline_access",
"expires_in": 86400,
"token_type": "Bearer"
}
おわりに
リフレッシュトークンを利用するとユーザーに再ログインをしてもらわなくても新しいトークンを取得できます。
ユーザーに再ログインを促すことなく、アクセストークンの有効期限以上の長期間にわたってアクセストークンを利用したい場合などに活用できると思います。