mike-neckのブログ

Java or Groovy or Swift or Golang

spring-security-oauth を用いて実装したリソースサーバーでのトークンの有効期限

spring-security-oauth を用いてリソースサーバーを実装する場合、 tokenServices という名前の ResourceServerTokenServices を実装するクラスのビーンを作ります。これを実装する時に気をつける必要があるのが、 ResourceServerTokenServices に、 loadAuthentication(String) というメソッドでアクセストークンからユーザーの認証・認可情報を復元する際に、 アクセストークンの有効期限(expired_in) のチェックをする必要があるということ。 readAccessToken というメソッドで返す OAuth2AccessToken というメソッドに getExpiration とか getExpiresIn とか isExpired とかトークンの有効期限を確認するメソッドがいつ使われているのかデバッグしていたら、特にデバッグされていないようだったので、javadocを読み直している時に気づいた。

例えば、Springが提供している RemoteTokenServices の実装では loadAuthentication メソッドでリモートにある認証・認可サーバーにアクセスして、ユーザーの認証・認可を復元する。その際にリモートの認証・認可サーバーがトークンの有効期限をチェックして、それが切れていた時にエラーを返すので、その段階でアクセストークンが有効ではないとエラーを返せる。

しかし、データベースでの連携などで、この実装を使わない場合は、トークンの有効期限を実装しておかないと、Springは何もチェックしてくれないので、いつまでも同じトークンでアクセスし続けてしまう事態を招く。

おわり