Authentication Solutions

認証(にんしょう) ソリューションの比較(ひかく)実装(じっそう) フロー。

Session & Cookie

  sequenceDiagram
    participant C as Client
    participant S as Server

    C ->> S: User Login {username, password}
    S ->> S: Create and Store Session in Server Memory
    S ->> C: Set-Cookie: session-id=1234567
    C ->> S: GET /user/data Cookie: session-id=1234567
    S ->> S: Compare session-id with stored data
    S ->> C: Response with user data

OAuth 2.0

詳細(しょうさい) なプロトコル説明(せつめい)OAuth 2.0 プロトコル参照(さんしょう)

  sequenceDiagram
    participant RO as Resource Owner(User)
    participant Client
    participant RS as Resource Server
    participant AS as Authorization Server

    RO->>Client: Google でログインをクリック
    Client->>AS: Google 認可ページにリダイレクト
    RO->>AS: アプリにリソースへのアクセスを許可
    AS->>RO: 認可コード(grant code)を返却
    Client->>RS: 認可コードをバックエンドサーバーに送信
    RS->>AS: 認可コードで Access Token をリクエスト
    AS->>RS: Access Token と Refresh Token を返却
    RS->>RS: Access Token で Google リソースにアクセス
    RS->>Client: 処理結果を応答
    Client->>RO: 結果をユーザーに表示

JWT

JWT Cheat Sheet

Passkeys

Passkeys は FIDO2 標準(ひょうじゅん)(もと) づくパスワードレス認証(にんしょう) ソリューション。

Authenticator タイプ

Platform Authenticators(デバイス内蔵(ないぞう) ):

  • TouchID / FaceID
  • Windows Hello
  • スマートフォン内蔵(ないぞう) 認証(にんしょう)

Roaming Authenticators外部(がいぶ) デバイス):

  • USB セキュリティキー
  • NFC
  • Bluetooth

Attestation(Passkey の作成)

  sequenceDiagram
    participant U as User
    participant A as Authenticator
    participant C as Client
    participant S as Server

    U --> C: Click Register
    C ->> S: Get challenge
    S ->> S: Create challenge [87cnN44C..]
    S -->> C: Return challenge
    C ->> A: credentials.create(challenge)
    A -->> U: Request verification
    U ->> U: Biometric / PIN
    U ->> A: Verified
    A ->> A: Create Keypair, Sign challenge
    A ->> A: Store private key
    A ->> C: [challenge✅, ID, public key]
    C ->> S: Send public key and signed challenge
    S ->> S: Verify signature, Store public key
    S -->> C: Passkey Created

Assertion(Passkey でログイン)

  sequenceDiagram
    participant U as User
    participant A as Authenticator
    participant C as Client
    participant S as Server

    U ->> C: Sign in with passkey
    C ->> S: Get challenge
    S ->> S: Create challenge
    S -->> C: [87cnN44C..]
    C --> A: credentials.get(challenge)
    A --> U: Request verification
    U ->> U: Biometric / PIN
    U ->> A: Verified
    A ->> A: Sign challenge
    A -->> C: [challenge✅, credential ID, Username]
    C ->> S: [challenge✅, credential ID, Username]
    S ->> S: Verify with public key

認証方式比較

Basic Authentication

項目(こうもく)説明(せつめい)
認証(にんしょう) 方式(ほうしき)(かく) リクエストで username/password を送信(そうしん)
セキュリティBase64 エンコード、容易(ようい) にデコード可能(かのう)
ステートレスはい
失効(しっこう) 機構(きこう)失効(しっこう)困難(こんなん)
適用(てきよう) 場面(ばめん)シンプルな API、内部(ないぶ) システム

Token-Based Authentication

項目(こうもく)説明(せつめい)
認証(にんしょう) 方式(ほうしき)(かく) リクエストで Token(通常(つうじょう) JWT)を送信(そうしん)
セキュリティToken は署名(しょめい)暗号化(あんごうか) 可能(かのう)
保存(ほぞん) 方式(ほうしき)LocalStorage または Cookie
ステートレスはい
失効(しっこう) 機構(きこう)有効(ゆうこう) 期限(きげん) 設定(せってい) または無効化(むこうか) 可能(かのう)
適用(てきよう) 場面(ばめん)現代(げんだい) 的 API、モバイル/Web アプリ

Session Authentication

項目(こうもく)説明(せつめい)
認証(にんしょう) 方式(ほうしき)サーバーが Session を作成(さくせい) 、Cookie で Session ID を送信(そうしん)
セキュリティ(たか) い、サーバー保存(ほぞん) の Session に(もと) づく
ステートレスいいえ、サーバー保存(ほぞん)依存(いぞん)
失効(しっこう) 機構(きこう)Session の失効(しっこう) または期限切(きげんぎ)可能(かのう)
適用(てきよう) 場面(ばめん)ユーザーセッションが必要(ひつよう) な Web アプリ

API Key Authentication

項目(こうもく)説明(せつめい)
認証(にんしょう) 方式(ほうしき)事前(じぜん) 生成(せいせい) の API Key を使用(しよう)
セキュリティ(ひく) い、窃取(せっしゅ)悪用(あくよう) されやすい
保存(ほぞん) 方式(ほうしき)環境(かんきょう) 変数(へんすう) または設定(せってい) ファイル
ステートレスはい
失効(しっこう) 機構(きこう)交換(こうかん) または失効(しっこう)必要(ひつよう)
適用(てきよう) 場面(ばめん)公開(こうかい) API、ユーザーログイン不要(ふよう) のアプリ

OAuth 2.0

項目(こうもく)説明(せつめい)
認証(にんしょう) 方式(ほうしき)サードパーティアプリがユーザー資格(しかく) 情報(じょうほう)公開(こうかい) せずにリソースにアクセス
セキュリティサードパーティ認可(にんか) をサポート、セキュリティが(たか)
ステートレスはい、分散(ぶんさん) システムに(てき) する
失効(しっこう) 機構(きこう)Token の期限切(きげんぎ) れまたは無効化(むこうか)
適用(てきよう) 場面(ばめん)サードパーティアプリ認可(にんか) 、Google ログインなど

OpenID Connect (OIDC)

項目(こうもく)説明(せつめい)
認証(にんしょう) 方式(ほうしき)OAuth 2.0 に ID 認証(にんしょう) レイヤーを追加(ついか)
セキュリティより(たか) い、ID 認証(にんしょう) 専用(せんよう) 設計(せっけい)
ステートレスはい、SSO をサポート
失効(しっこう) 機構(きこう)Token 期限切(きげんぎ) れ、ID プロバイダーによる失効(しっこう) 可能(かのう)
適用(てきよう) 場面(ばめん)シングルサインオン(SSO)、ID 認証(にんしょう)

Multi-Factor Authentication (MFA)

項目(こうもく)説明(せつめい)
認証(にんしょう) 方式(ほうしき)基本(きほん) 認証(にんしょう) + (だい) 2 (そう) 認証(にんしょう) (SMS、TOTP)
セキュリティ追加(ついか) セキュリティレイヤー、資格(しかく) 情報(じょうほう) 窃取(せっしゅ)防止(ぼうし)
ユーザー体験(たいけん)追加(ついか) 操作(そうさ)必要(ひつよう)
適用(てきよう) 場面(ばめん)(こう) セキュリティシステム

Biometric Authentication

項目(こうもく)説明(せつめい)
認証(にんしょう) 方式(ほうしき)指紋(しもん)(かお)虹彩(こうさい) などの生体(せいたい) 特徴(とくちょう)
セキュリティ(たか) い、模倣(もほう)困難(こんなん)
ユーザー体験(たいけん)便利(べんり) 、ただしハードウェアサポートが必要(ひつよう)
適用(てきよう) 場面(ばめん)金融(きんゆう) アプリ、スマートフォンロック解除(かいじょ)

Passkey

項目(こうもく)説明(せつめい)
認証(にんしょう) 方式(ほうしき)FIDO2 標準(ひょうじゅん)(もと) づくパスワードレス認証(にんしょう)
セキュリティ(きわ) めて(たか) い、パスワード不要(ふよう)
ユーザー体験(たいけん)便利(べんり) 、パスワードを(おぼ) える必要(ひつよう) がない
適用(てきよう) 場面(ばめん)(こう) セキュリティシステム、パスワードレスログインサービス

関連トピック