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)として提供します。これにより、ユーザーの認証とアクセス権限の管...