Posts

Implementing Passkeys Authentication in Rust with Axum

Image
Introduction Understanding WebAuthn and Passkeys The WebAuthn Flow Registration Flow Authentication Flow Client-Side Implementation Registration Implementation Authentication Implementation Server Implementation in Rust State Management Registration Handler Implementation Authentication Handler Implementation WebAuthn Data Structures and API Formats Data Flow and Transformations Registration Data Structures Standard WebAuthn Interfaces Our Implementation's API Format Authentication Data Structures Standard WebAuthn Interfaces Our Implementation's API Format What's Next Session management OAuth2/OIDC integration Storage Conclusion Resources Introduction As a developer learning web programming and authentication in Rust, I recently undertook the challenge of implementing WebAuthn Passkeys using the Axum web framework. In this post, I'll share my experience building a basic Passkey authentication system from scratch, without rel...

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