通常のサイトだと、secure sessionを使ったログイン認証が使われている。 スマホのネイティブアプリなどでAPIを使用する場合、sessionが使えないらしく、Oauth2のトークン認証が使われている。
sessionの場合、IDの洗い替えを意識しなくていい。
トークンの場合、アプリ側が頑張る必要が出てくる。
通常トークンとリフレッシュ用トークンの二つを発行して、 1時間以内で、リフレッシュ用トークンを使用して、通常トークンの洗い替えを行う。
通常トークンとリフレッシュトークンが、悪意のあるユーザに盗まれたとしても、 通常トークンの期限切れのタイミングで、悪意のあるユーザがリフレッシュを行い、 正規ユーザの通常トークンが使えなくなり、再度ログインを促されるため、安全になるはず?
逆に言えば、↑の洗い替えを適切に行っていない&再度ログインを促さないとかすると、まずい。
また、個人的には、通常トークンが期限切れ以外の状態になるのは、異常なので、 それを検知した段階で、サーバーサイドで、両方のトークンを無効化(トークン削除)を行うべきだと考える。