SAML パーサー
SAML(Security Assertion Markup Language)は、IDプロバイダー(IdP)とサービスプロバイダー(SP)間で認証・認可データを交換するためのXMLベースの標準です。このツールはURLからSAMLメッセージをデコードし、Base64とDEFLATEエンコーディングを処理し、検査のためにXMLを整形出力します。
仕様
よくあるユースケース
- エンタープライズシングルサインオン(SSO)認証フローのデバッグ
- IDプロバイダー(Okta、Azure AD、ADFS)からのSAMLアサーションの検査
- サービス間のSAML統合のトラブルシューティング
- アサーション属性とNameID値の検証
- AuthnContextとセッションパラメータの分析
- セキュリティレビューのためのSAML設定の監査
機能
- SAML AuthnRequestメッセージの解析(SPからIdP)
- SAML ResponseとAssertionのデコード(IdPからSP)
- URLクエリパラメータからSAMLRequestとSAMLResponseを抽出
- Base64エンコーディングとDEFLATE圧縮の処理(HTTP-Redirectバインディング)
- シンタックスハイライト付きのXML構造の整形出力
- メッセージ概要の表示(タイプ、ID、IssueInstant、Destination、Status)
- Issuer、Subject/NameID、Conditionsの抽出
- AttributeStatementからアサーション属性を表示
- 署名存在インジケーター
例
SAML Response URL
試してみる →クエリ文字列にBase64エンコードされたSAML Responseを含むURL。
https://sp.example.com/acs?SAMLResponse=PHNhbWxwOlJlc3BvbnNlIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iIElEPSJfcmVzcDEyMyIgVmVyc2lvbj0iMi4wIiBJc3N1ZUluc3RhbnQ9IjIwMjYtMDMtMjdUMTA6MDA6MDBaIiBEZXN0aW5hdGlvbj0iaHR0cHM6Ly9zcC5leGFtcGxlLmNvbS9hY3MiPjxzYW1sOklzc3Vlcj5odHRwczovL2lkcC5leGFtcGxlLmNvbTwvc2FtbDpJc3N1ZXI+PHNhbWxwOlN0YXR1cz48c2FtbHA6U3RhdHVzQ29kZSBWYWx1ZT0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnN0YXR1czpTdWNjZXNzIi8+PC9zYW1scDpTdGF0dXM+PHNhbWw6QXNzZXJ0aW9uIElEPSJfYXNzZXJ0NDU2IiBWZXJzaW9uPSIyLjAiIElzc3VlSW5zdGFudD0iMjAyNi0wMy0yN1QxMDowMDowMFoiPjxzYW1sOklzc3Vlcj5odHRwczovL2lkcC5leGFtcGxlLmNvbTwvc2FtbDpJc3N1ZXI+PHNhbWw6U3ViamVjdD48c2FtbDpOYW1lSUQgRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoxLjE6bmFtZWlkLWZvcm1hdDplbWFpbEFkZHJlc3MiPnVzZXJAZXhhbXBsZS5jb208L3NhbWw6TmFtZUlEPjwvc2FtbDpTdWJqZWN0PjxzYW1sOkNvbmRpdGlvbnMgTm90QmVmb3JlPSIyMDI2LTAzLTI3VDA5OjU1OjAwWiIgTm90T25PckFmdGVyPSIyMDI2LTAzLTI3VDEwOjA1OjAwWiI+PHNhbWw6QXVkaWVuY2VSZXN0cmljdGlvbj48c2FtbDpBdWRpZW5jZT5odHRwczovL3NwLmV4YW1wbGUuY29tPC9zYW1sOkF1ZGllbmNlPjwvc2FtbDpBdWRpZW5jZVJlc3RyaWN0aW9uPjwvc2FtbDpDb25kaXRpb25zPjxzYW1sOkF0dHJpYnV0ZVN0YXRlbWVudD48c2FtbDpBdHRyaWJ1dGUgTmFtZT0iZW1haWwiPjxzYW1sOkF0dHJpYnV0ZVZhbHVlPnVzZXJAZXhhbXBsZS5jb208L3NhbWw6QXR0cmlidXRlVmFsdWU+PC9zYW1sOkF0dHJpYnV0ZT48c2FtbDpBdHRyaWJ1dGUgTmFtZT0icm9sZSI+PHNhbWw6QXR0cmlidXRlVmFsdWU+YWRtaW48L3NhbWw6QXR0cmlidXRlVmFsdWU+PC9zYW1sOkF0dHJpYnV0ZT48L3NhbWw6QXR0cmlidXRlU3RhdGVtZW50Pjwvc2FtbDpBc3NlcnRpb24+PC9zYW1scDpSZXNwb25zZT4%3Dヒント
- SAMLは2つの主要なバインディングを使用します:HTTP-Redirect(deflate+base64によるGET)とHTTP-POST(base64によるPOST)。
- RelayStateパラメータはSSOフロー全体を通じて元のリクエストURLを保持します。
- SAMLアサーションは署名、暗号化、またはその両方が可能です。このツールはデコードされた内容を表示します。
- NotBeforeとNotOnOrAfter条件を確認してアサーションの時間的妥当性を検証してください。
解説 SAML パーサー
SAML(Security Assertion Markup Language)は、IDプロバイダー(IdP)とサービスプロバイダー(SP)間で認証・認可データを交換するためのXMLベースのオープン標準です。2005年にOASISによって公開されたSAML 2.0は、エンタープライズシングルサインオン(SSO)の主要プロトコルとして、従業員が一度の認証で複数のアプリケーションにアクセスできるようにします。
SAML SSOフローは次のように動作します:ユーザーがサービスプロバイダーにアクセスしようとすると、SPがAuthnRequestを生成してブラウザをIdPにリダイレクトし、IdPがユーザーを認証してAssertionを含むSAML Responseを作成し、ブラウザがこのResponseをPOSTでSPに送り返します。アサーションにはユーザーのID(NameID)、属性(メール、グループ、ロール)、条件(有効期間、オーディエンス制限)が含まれます。
SAMLメッセージはバインディングを使用して転送されます。HTTP-RedirectバインディングはDEFLATE圧縮とBase64エンコーディングを使用してXMLをURLクエリパラメータにエンコードします。HTTP-POSTバインディングはBase64のみを使用し、自動送信フォームを介して送信します。SAMLのデバッグには、これらのレイヤーをデコードして基盤となるXMLを検査する必要があります。
SAMLアサーションは署名(IdPから来たことを証明するため)、暗号化(中間者が内容を読むことを防ぐため)、またはその両方が可能です。SSOの問題をトラブルシューティングする際の最初のステップは、常にSAML Responseをデコードして、アサーションの条件、オーディエンス、タイムスタンプ、属性値を確認することです。
SAMLとOAuth 2.0/OpenID Connectは異なる目的を果たします。SAMLはブラウザリダイレクトを介して転送されるXMLベースのアサーションを使用するエンタープライズSSO向けに設計されており、ADFSやOktaのようなIDプロバイダーを持つエンタープライズ環境で最も一般的です。OAuth 2.0はJSONトークンを使用するAPI アクセスのための認可フレームワークであり、OpenID ConnectはJWTを使用してOAuthの上に認証レイヤーを追加します。OIDCはモダンなWebおよびモバイルアプリケーションでより一般的であり、SAMLは企業IT環境で引き続き主流です。
SAMLメッセージは転送のためにエンコードされているため、理解しづらい文字列として表示されることがよくあります。HTTP-POSTバインディングでは、XMLはBase64エンコードされます。HTTP-Redirectバインディングでは、XMLはまずDEFLATE圧縮され、次にBase64エンコードされ、さらにURLエンコードされます。元のXMLを読むには、これらのレイヤーを正しい順序で元に戻す必要があります。このツールは使用されたバインディングに関係なく、すべてのデコード手順を自動的に処理します。
SAMLエラーのトラブルシューティングでは、いくつかの一般的な原因を確認してください:IdPとSP間のクロックスキューによりアサーションのタイムスタンプが検証に失敗する可能性があります。Audience要素はSPで設定されたエンティティIDと正確に一致する必要があります。アサーションがNotOnOrAfter時間を過ぎている場合があります。Destination属性はSPのAssertion Consumer Service(ACS)URLと一致する必要があります。IdPの署名証明書が最近ローテーションされた場合、SPが最新の証明書を持っていない可能性があります。RelayStateパラメータもSSOフローで重要な役割を果たします。認証リダイレクトを通じてユーザーが最初にリクエストしたURLを保持し、認証成功後にSPがユーザーを最初にアクセスしようとしたページにリダイレクトできるようにします。