spring-security-oauth を用いて実装したリソースサーバーでのトークンの有効期限
spring-security-oauth を用いてリソースサーバーを実装する場合、 tokenServices
という名前の ResourceServerTokenServices
を実装するクラスのビーンを作ります。これを実装する時に気をつける必要があるのが、 ResourceServerTokenServices
に、 loadAuthentication(String)
というメソッドでアクセストークンからユーザーの認証・認可情報を復元する際に、 アクセストークンの有効期限(expired_in) のチェックをする必要があるということ。 readAccessToken
というメソッドで返す OAuth2AccessToken
というメソッドに getExpiration
とか getExpiresIn
とか isExpired
とかトークンの有効期限を確認するメソッドがいつ使われているのかデバッグしていたら、特にデバッグされていないようだったので、javadocを読み直している時に気づいた。
例えば、Springが提供している RemoteTokenServices
の実装では loadAuthentication
メソッドでリモートにある認証・認可サーバーにアクセスして、ユーザーの認証・認可を復元する。その際にリモートの認証・認可サーバーがトークンの有効期限をチェックして、それが切れていた時にエラーを返すので、その段階でアクセストークンが有効ではないとエラーを返せる。
しかし、データベースでの連携などで、この実装を使わない場合は、トークンの有効期限を実装しておかないと、Springは何もチェックしてくれないので、いつまでも同じトークンでアクセスし続けてしまう事態を招く。
おわり