SAML调试

SAML断言解析和调试,支持Base64编码/解码的SAML Response解析

🔍 断言解析
📋 SAML模板
📖 参考文档
粘贴SAML Response(Base64编码或原始XML)

SAML 2.0 AuthnRequest (SP发起)

<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
  xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
  ID="_1234567890" Version="2.0"
  IssueInstant="2024-01-01T00:00:00Z"
  Destination="https://idp.example.com/sso"
  AssertionConsumerServiceURL="https://sp.example.com/acs">
  <saml:Issuer>https://sp.example.com</saml:Issuer>
  <samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" AllowCreate="true"/>
</samlp:AuthnRequest>

SAML 2.0 Response

<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
  ID="_response123" Version="2.0"
  IssueInstant="2024-01-01T00:00:00Z"
  Destination="https://sp.example.com/acs"
  InResponseTo="_1234567890">
  <saml:Issuer>https://idp.example.com</saml:Issuer>
  <samlp:Status>
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
  </samlp:Status>
  <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
    ID="_assertion123" Version="2.0"
    IssueInstant="2024-01-01T00:00:00Z">
    <saml:Issuer>https://idp.example.com</saml:Issuer>
    <saml:Subject>
      <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">user@example.com</saml:NameID>
      <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
        <saml:SubjectConfirmationData
          NotOnOrAfter="2024-01-01T00:05:00Z"
          Recipient="https://sp.example.com/acs"
          InResponseTo="_1234567890"/>
      </saml:SubjectConfirmation>
    </saml:Subject>
    <saml:Conditions NotBefore="2024-01-01T00:00:00Z" NotOnOrAfter="2024-01-01T00:05:00Z">
      <saml:AudienceRestriction>
        <saml:Audience>https://sp.example.com</saml:Audience>
      </saml:AudienceRestriction>
    </saml:Conditions>
    <saml:AttributeStatement>
      <saml:Attribute Name="email" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
        <saml:AttributeValue>user@example.com</saml:AttributeValue>
      </saml:Attribute>
    </saml:AttributeStatement>
  </saml:Assertion>
</samlp:Response>

SAML 2.0 核心概念

SP (Service Provider)  → 服务提供者,用户要访问的应用
IdP (Identity Provider) → 身份提供者,认证服务

SP-Initiated: 用户从SP开始 → 重定向到IdP → 认证后返回SP
IdP-Initiated: 用户从IdP开始 → 直接跳转到SP

SAML绑定方式

HTTP-Redirect  → SAML消息通过URL参数传递(GET)
HTTP-POST      → SAML消息通过表单POST传递
HTTP-Artifact  → 传递Artifact引用,再解析获取完整消息

常见问题排查

1. 时钟偏差 → NotBefore/NotOnOrAfter时间不匹配
2. Audience不匹配 → AudienceRestriction与SP EntityID不一致
3. 签名验证失败 → 证书不匹配或XML规范化问题
4. InResponseTo不匹配 → 与AuthnRequest的ID不对应
5. Recipient不匹配 → 与ACS URL不一致

编码/解码

SP → IdP: AuthnRequest → Deflate → Base64 → URL Encode
IdP → SP: Response → Base64 → POST Form

解码步骤: URL Decode → Base64 Decode → XML
(如果先Deflate则需要先Inflate)