最近raindropのAPIを使うのにOAuth2の認証を実装しています。
そこで出てきたrefresh_token。これはどういうときに使うのかというのを疑問に思っていて、ちょっと調べたのでメモっておきます。
どんな時に使うのか
まずはrefresh_tokenはどういうときに使うのか。
- access_tokenの有効期限が切れた場合、リフレッシュトークンを使って新しいaccess_tokenを取得する。
- ユーザーの再認証を行わずに、新しいaccess_tokenを取得する場合に利用する。
なるほど。
それ以外に出てくる用語
関連する用語として、以下の用語があります。
単語 | 説明 |
---|---|
redirect_uri | 認可コードを受け取るためのリダイレクトURI |
client_id | クライアントアプリを識別するID |
client_secret | クライアントアプリの秘密鍵 |
code | 認可エンドポイントが発行する認可コード |
access_token | リソースにアクセスするためのトークン |
refresh_token | access_tokenの更新に使用するトークン |
OAuth2の認証の流れ
流れ的には以下。
クライアントアプリが認可エンドポイントにリクエストを送信
↓
認可が得られるとcodeが発行され、redirect_uriにリダイレクト
↓
codeとclient_id、client_secretを使ってaccess_tokenとrefresh_tokenを取得
↓
access_tokenの有効期限切れ時にrefresh_tokenを使ってaccess_tokenの更新
一度access_tokenを取得して、それが有効期限が切れた場合にrefresh_tokenを使用することになる。
結局どうすればいいのか?
本来の実装としては、既存のaccess_tokenを使用して、それが期限切れ(401が返ってきた)場合にはrefresh_tokenを使って新たにaccess_tokenを取得する・・・・という流れがいいのかなと思いますが、そのほかの方法もあるかと思っています。
例えば、毎回refresh_tokenを使ってaccess_tokenを取得するような実装にするとか。
どっちのほうがいいのかもっと事例を調べてみて明確にしようかと思います。いいサイトがあればぜひ教えてくださいー。
ではでは。