Posts

AxumでGoogle OAuth2/OIDC認証を実装する

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

Axum Google OAuth2/OIDC implementation

Image
Introduction Overview What Are OAuth2 and OpenID Connect? How Authentication Works: Key Concepts Implementation Details Authentication Flow Route Structure Main Page Behavior Initiating the OAuth2 Flow Handling OAuth2 Callback Managing User Sessions Security Considerations Nonce Validation CSRF Protection PKCE Validation Cookie Security Response Mode Security Authentication with Authorization Code Flow ID Token Validation Conclusion Introduction Modern web applications often rely on OAuth2/OIDC for secure user authentication. As part of a recent exploration into Rust and Axum, I implemented a login system that integrates Google OAuth2. In this post, I’ll walk through the details of the implementation, covering both the theoretical aspects and practical steps involved in building a secure authentication system. To keep things concise, I’ve included simplified code snippets for key components. The full implementation is available in my GitHub repository . ...

Sign in with Google vs OpenID Connect: Understanding the difference

Introduction Technical Relationship Implementation Comparison Sign in with Google Standard OIDC Authentication Flows Sign in with Google Flow OIDC Code Flow Implementation Distinctions Protocol Implementation Security Considerations Feature Scope Choosing the Right Approach Conclusion Introduction Third-party authentication has become ubiquitous in modern web applications, allowing users to sign in using existing accounts from major providers. While OAuth 2.0 and OpenID Connect (OIDC) are the standard protocols for implementing such authentication, Google offers two distinct approaches - the standard OIDC implementation and Sign in with Google - whose relationship is often misunderstood. The similarity between Sign in with Google and OIDC’s implicit flow can be particularly misleading. Though they share some characteristics, such as direct ID token delivery, they are fundamentally different implementations with distinct capabilities and limitations. This confus...

Sign in with Google in HTMX+FastAPI

Image
TL;DR Introduction What I Implemented Anonymous User Page Authenticated User Page HTMX with FastAPI Sign In Overview Frontend Auth Sign in with Google button The Callback Function Backend Auth Sign Out Overview Frontend Backend Switch Navbar Protecting Routes Conclusion Seeking Oppotunities TL;DR The “Sign in with Google” feature has been integrated into a sample HTMX+FastAPI web application. Either an HTML or JavaScript version of a code snippet from Google’s code generator is included in the HTML to display the button. The FastAPI backend has been configured to create a session from the JWT and set “Set-Cookie: session_id” in the header, enabling subsequent communications to maintain the login status through a session cookie. Thanks to HTMX functionality, the application page can dynamically fetch the navigation bar upon a change in login status, indicating whether the user is logged in. Introduction As an aspiring full-stack software developer, I’ve...