質問: 仕事でスマホネイティブアプリの開発に携わっていて、最近のプロジェクトではOAuthでのログインが仕様なのですが、 OAuthの仕組みで腑に落ちない事があります。 アクセストークン:有効期限短い。期限が切れた場合は同時に提供されるリフレッシュトークンで新しいアクセストークンを取得可能。 リフレッシュトークン:有効期限長い。 というのがよくある設定だと思うのですが、スマホアプリでのログインしっぱなしを実現するだけなら、 アクセストークンの有効期限を長めに設定すれば良いだけのような気がして、腑に落ちません。 個人のデータにアクセスするのでアクセストークンは短くして、必要な時にリフレッシュトークンで再度新しいアクセストークン発行するのはサーバ側のセキュリティとユーザー側の操作性のバランスを取っているのかなとは思うのですが、 例えばリフレッシュトークンが何らかの方法で第三者に漏れたら、アクセストークンを発行出来てしまうので、それならアクセストークンの有効期限を長めにしているのと、そこまで変わらないのでは? アプリ開発がメインなので、サーバ知識にはそこまで詳しくないのですが、 有効期限の長いアクセストークンの提供ではダメな理由や経緯を知りたいと思い、 投稿しました。
回答: 漏洩リスクが最も高いのはネットワークを流れている時だからです。 アクセストークンのリフレッシュ > > リフレッシュトークンがネットワーク上を流れる回数は、アクセストークンに比べて少なくてすむため、漏洩の観点からは相対的に安全性が高まります。 > > > つまりリフレッシュトークンは露出頻度を抑えることにより、アクセストークンは寿命を抑えることにより、漏洩リスクを減らしています。露出頻度も高く寿命も長い一つのトークンを使うよりも安全です。