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

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 標準 に基 づくパスワードレス認証 |
| セキュリティ | 極 めて高 い、パスワード不要 |
| ユーザー体験 | 便利 、パスワードを覚 える必要 がない |
| 適用 場面 | 高 セキュリティシステム、パスワードレスログインサービス |