AxumでGoogle OAuth2/OIDC認証を実装する
 この記事は Rust Advent Calendar 2024  シリーズ2の6日目の記事です。   はじめに  概要   OAuth2とOpenID Connectとは  認証の仕組み   実装の詳細   認証フローの実装  アプリケーションの構造  メインページの実装  認証フローの開始  コールバック処理  セッション管理   セキュリティ対策の詳細   Nonceによる検証  CSRF保護  Cookieのセキュリティ  レスポンスモードのセキュリティ  認可コードフローによる認証  IDトークンの検証   おわりに   はじめに  RustとAxumを使って、Google OAuth2でのログイン機能を実装しました。OAuth2とOIDCを使った認証は現代のWebアプリケーションでは一般的な方法です。この記事では、安全な認証システムを作るために必要な基礎知識と、具体的な実装方法を説明します。  ソースコードは GitHubリポジトリ で公開しています。記事中のコードは理解のために簡略化していますので、完全な実装はリポジトリをご覧ください。 (本稿は 英語版 からの翻訳記事です。)    概要  OAuth2とOpenID Connectとは  OAuth2とOpenID Connect(OIDC)は、現代のWebアプリケーションの認証を支える重要な技術です。  OAuth2は認証の基盤となる技術で、ユーザーが自分の認証情報を直接渡すことなく、アプリケーションに特定の機能へのアクセス権を与えることができます。アプリケーションはアクセストークン(access token)を使ってこれらの機能を利用します。この実装では、広く使われている安全な方法である認可コードフロー(authorization code flow)を使って、ユーザー情報を取得しています。  OpenID Connect(OIDC)は、OAuth2を拡張して標準的な認証の仕組みを追加したものです。OAuth2が「アプリケーションに何を許可するか」を扱うのに対し、OIDCは「このユーザーは誰か」を確認することを主な目的としています。OIDCでは、ユーザー情報をJSON Web Token(JWT)形式のIDトークン(ID token)として提供します。これにより、ユーザーの認証とアクセス権限の管...