ネイティブ アプリでは、ログインを 1 回だけ求められ、ログアウトを希望するまでユーザーが記憶されます。残念ながら、ウェブは常にそうはなりません。
デバイス(特にモバイル デバイス)がよりパーソナルになり、すべてのトラフィックを HTTPS 経由で送信するサイトが増え、トークンの盗難のリスクが軽減されている現在、ウェブサイトは有効期間の短い Cookie ポリシーを見直し、よりユーザー フレンドリーで有効期間の長いセッションを採用する必要があります。
ただし、セッションを長くしたい場合でも、リクエストごとにユーザーの認証を検証しないウェブサイトもあります(つまり、発行されたセッション Cookie を取り消す方法はありません)。通常、この場合、セッションが短くなり、ユーザーは認証を再検証するために頻繁にログインする必要があります。これにより、パスワードの変更などの操作で、既存のセッションが一定の時間が経過すると無効になります。
このアプローチを使用している場合は、ステートレス認証 Cookie を自動的に再検証できる技術的なソリューションをご利用いただけます。これは、既存の有効期間の短い認証 Cookie の更新に使用できるセカンダリ長期トークンを使用することで機能します。新しいサービス ワーカー パターンを活用することで、長期間有効なトークンを定期的に「チェックイン」し、ユーザーの認証を確認(最近パスワードを変更していないか、セッションを無効にしていないかなどを確認)、新しい有効期間の短い認証 Cookie を再発行できます。
ウェブ上で安全な長時間セッションに移行するための実用的な提案
以降では、2 つの Cookie の受け渡し(2CH)という新しい手法について説明します。Google は、このアプローチがポジティブなものであるかどうかについて、コミュニティからのフィードバックを得ることを目的として、この記事を公開します。ポジティブである場合は、業界と連携して 2CH の使用に関するベスト プラクティスを文書化したいと考えています。
サービス ワーカーは、Chrome、Firefox、Opera などの複数のブラウザでサポートされている新しいテクノロジーです。Edge にも近日対応予定です。既存のページを変更することなく、クライアントの共通のコードポイントからサイトからのすべてのネットワーク リクエストをインターセプトできます。これにより、ログインしたユーザーに対して「2CH ワーカー」を設定できます。このワーカーは、ページが行っているすべてのネットワーク リクエストをインターセプトし、モバイルアプリと同様にトークン交換を実行できます。
多くの場合、サーバーに、モバイルアプリが新しい有効期間の短いトークンを取得するために使用するエンドポイントがすでにあります(通常は OAuth プロトコルを使用します)。ウェブで上記のパターンを有効にするには、そのエンドポイントを更新して、サービス ワーカーによって呼び出されたタイミングを把握し、サイト上の他のページがすでに想定している形式で新しい短時間のセッション Cookie を返すだけです。
サーバーにこのようなエンドポイントがまだない場合は、ブラウザ セッション管理専用にエンドポイントを作成できます。
サービス ワーカーを使用した 2 トークン パターンは OAuth 2.0 パターンに非常に近いため、すでに OAuth トークン エンドポイントを実行している場合は、ウェブ認証にサービス ワーカーで再利用できます。
サービス ワーカーをサポートしていないブラウザにユーザーがアクセスした場合はどうなるでしょうか。上記のアプローチを実装しても、ユーザーには違いが感じられず、引き続き短いセッションが続くことになります。
サンプル クライアントとバックエンドが公開されています。ぜひご自身で試して、セッション管理に関するアンケートにご協力ください。