6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Auth0】リフレッシュトークンの取得方法と使い方

Posted at

はじめに

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"
}

おわりに

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

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?