4
2

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.

RFC7009 OAuth 2.0 Token Revocation を実装するときに注意すべきこと

Last updated at Posted at 2019-07-10

#目次

  1. はじめに -RFC7009について
  2. MUSTとSHOULDなど整理
  3. tokenについて
  4. OAuth保護について

1. はじめに -RFC7009について

RFC7009 OAuth 2.0 Token Revocation
英語版:https://tools.ietf.org/html/rfc7009
日本語訳:https://openid-foundation-japan.github.io/rfc7009.ja.html

このRFCには簡単に言うと、

  • アクセストークン、リフレッシュトークンの有効期間内でそのトークンが不要になった場合に、トークンを失効できる機能を提供しましょう。
  • HTTPリクエストエンティティボディにパラメーターtokenで失効したいトークンを入れましょう。

といったことが記載されています

以前、トークン失効の機能をAPIとして実装しようとしていてをパッと読んで「簡単そうじゃん!」と思っていました。
いざ作成しようとした時にRFCをじっくり読み返すと、RFCの意図していることが見えてきてその注意点について記載いたします。詳細については上記リンクからRFCを読んでください。

2. ポイントとなるMUSTとSHOULDなど整理

一番大事なところだけ整理してまとめてみました。

内容 Requirement Levels
リフレッシュトークンを失効させる機能 MUST
アクセストークンを失効させる機能 SHOULD
token MUST
token_type_hint OPTIONAL

3. tokenについて

tokenは、HTTPリクエストエンティティボディに必須で入るパラメーターです。
値は失効させたいアクセストークン値 or リフレッシュトークン値が入ります。

######①リフレッシュトークン値が入っている場合
同じ認可元のアクセストークン全てを失効させるべきである。(SHOULD)
※アクセストークンを失効させる機能を実装させない場合、RFCの6.Security Considerationsにあるようにセキュリティーに気をつけなければなりません。

######②アクセストークン値が入っている場合
同じ認可元のすべてのリフレッシュトークンを失効させてもよい。(MAY)

######③リフレッシュトークンでもアクセストークンでも当てはまらない値が入っている or 無効なリフレッシュトークン、アクセストークン が入っている場合
失効させるトークンはないが、レスポンスコードは200を返却する。
これは、クライアント側が失効させたいトークンがすでに使えない状態になっているので問題ないと言うことと理解しました。なのでエラーレスポンスではなく200で返却です。

4. OAuth保護について

当然のようにセキュリティー的に、この機能もOAuth保護(Authorization: Bearer <アクセストークン>)をするだろう。そうしなければ、他のAPIでOAuth保護で使っているトークンとか晒されることになるのでは?と思っていました。

結論からいうと
「OAuth保護しない」が正しいです。
RFCのサンプルでもBasic認証をしているようです。

なぜか考えたのですが、以下の考えにたどり着きました。

OAuth保護ありでトークンの失効をする場合、アクセストークンの有効期限が切れていてリフレッシュトークンを失効させるが実施できない。
アクセストークンのは基本的に寿命短としているため、リフレッシュトークン(寿命長め)を元にトークン失効することが考えられるがOAuth保護ありではトークン失効をする前に認証で弾かれてしまう。
トークン失効をするために再度アクセストークンの再発行することはクライアントにとって合理的ではない。

その代わりのセキュリティー保護としては、Basic認証やクライアントID、クライアントシークレットで守るしかないと思います。

4
2
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?