認証トークン復号ガイド:OAuth、SAML、および Bearer トークン
現代の Web 開発において、認証はユーザー名とパスワードのように単純なものであることは稀です。代わりに、システムは「トークン」を交換します。これは、ID や権限データを運ぶ不透明または半透明の文字列です。認証フローのデバッグやセキュリティ監査を行う際、これらのトークンを復号して検査できることは重要なスキルです。
このガイドでは、最も一般的な認証トークンの技術的な構造とその復号方法について説明します。
1. Bearer トークン(JWT とその先へ)
Bearer トークンは、API リクエストを認証する最も一般的な方法です。通常、Authorization ヘッダーで送信されます。
Authorization: Bearer <token>
Bearer トークンとは?
Bearer トークンは、それを「保持している(bears)」人なら誰にでもアクセスを許可するセキュリティトークンです。物理的な鍵のようなもので、システムはあなたが誰であるかは気にせず、鍵を持っていることだけを気にします。
Bearer トークンの復号
現代の Bearer トークンのほとんどは JWT (JSON Web Tokens) です。JWT は、Base64Url でエンコードされた 3 つの部分で構成されています。
- ヘッダー (Header):トークンに関するメタデータ(アルゴリズム、タイプ)。
- ペイロード (Payload):「クレーム」(ユーザー ID、有効期限、スコープ)。
- 署名 (Signature):トークンが改ざんされていないことの暗号化による証明。
JWT を手動で復号するには、ドットで文字列を分割し、最初の 2 つの部分に Base64Url デコーダーを使用します。より視覚的に確認するには、JWT デコーダーを使用できます。
2. OAuth トークンの復号
OAuth 2.0 はいくつかのタイプのトークンを使用しますが、最も頻繁に遭遇するのはアクセストークン (Access Token) です。
不透明トークン vs 構造化トークン
- 構造化トークン (JWT):上述の通り、これらはローカルで復号してユーザーのデータを確認できます。
- 不透明トークン (Opaque Tokens):これらはランダムな文字列(GitHub の
ghp_...など)であり、クライアントにとっては意味を持ちません。これらは発行した認可サーバーによってのみ、通常はイントロスペクションエンドポイント (Introspection Endpoint) を介して「復号」できます。
OAuth トークンの検査方法
トークンが JWT の場合は、標準の JWT 復号プロセスに従います。不透明な場合は、特定のプロバイダー(Google、Microsoft、GitHub)のドキュメントを参照して、デバッグツールやトークンのメタデータ(スコープ、有効期限など)を検査するための API が提供されているかを確認する必要があります。
3. SAML アサーションデコーダー
SAML (Security Assertion Markup Language) は、JWT の XML 版とも言えるプロトコルです。企業のシングルサインオン (SSO) で広く使用されています。
SAML フロー
SAML を介してログインすると、アイデンティティプロバイダー (IdP) はアプリケーションに SAMLResponse を送信します。通常、これは隠しフォームフィールドとして送信されます。
SAML アサーションの復号方法
SAML アサーションは通常、Base64 エンコードされた XML ドキュメントです。
- Base64 デコード:文字列を生の XML に戻します。
- 整形表示 (Pretty Print):XML を読みやすいようにフォーマットします。
- クレームの検査:
<saml:AttributeStatement>を探して、ユーザーのメールアドレス、ロール、その他の属性を確認します。
SAML アサーションは XML であるため、JWT よりも非常に冗長であり、多くの場合デジタル署名 (<ds:Signature>) や、時には暗号化が含まれています。
4. 基本認証 (Basic Auth) の復号
古い手法ではありますが、基本認証は単純な API や内部ツールで依然として一般的です。
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
基本認証の復号
Basic の後の文字列は、username:password 形式の単純な Base64 エンコードされた文字列です。
復号するには:
- 文字列
dXNlcm5hbWU6cGFzc3dvcmQ=を取得します。 - Base64 デコードして
username:passwordを得ます。
概要表:トークン復号の一覧
| トークンタイプ | ヘッダープレフィックス | 形式 | 復号方法 |
|---|---|---|---|
| JWT | Bearer |
JSON / Base64Url | Base64Url デコード + JSON パース |
| OAuth (不透明) | Bearer |
ランダム文字列 | トークンイントロスペクション API |
| SAML | N/A (フォーム) | XML / Base64 | Base64 デコード + XML パース |
| 基本認証 | Basic |
文字列 / Base64 | Base64 デコード |
結論
認証トークンの復号方法を理解することは、「Unauthorized」エラーのトラブルシューティングや、アプリケーションが正しい権限を渡していることを確認するために不可欠です。現代的な JWT を扱っている場合でも、レガシーな SAML アサーションを扱っている場合でも、最初のステップは常にエンコーディング(通常は Base64)と基になる形式(JSON または XML)を特定することです。
トークンを素早く検査する必要がありますか?私たちの JWT デコーダーを使用して、ブラウザでローカルに安全にトークンを解析してください。