はじめに
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"
}
おわりに
リフレッシュトークンを利用するとユーザーに再ログインをしてもらわなくても新しいトークンを取得できます。
ユーザーに再ログインを促すことなく、アクセストークンの有効期限以上の長期間にわたってアクセストークンを利用したい場合などに活用できると思います。