ADFS idpinitiatedsignon SAML 断言未签名
ADFS idpinitiatedsignon SAML assertion not signed
我正在尝试使用网络视图通过 https://<adfs_domain>/adfs/ls/idpinitiatedsignon
提取 SAMLResponse 断言。问题是 SAMLResponse 断言未签名且签名未包含在断言中。
因此我无法验证 SAML 断言。我们已使用 ADFS 签名证书配置 ADFS,因为它是 IDP 启动的流程。
我们还在 ADFS 中设置了以下 属性:
SamlResponseSignature = AssertionOnly
<samlp:Response ID="_255ada50-94a5-493a-9234-0e9801f0a994" Version="2.0" IssueInstant="2020-03-09T13:27:11.297Z" Destination="https://mobile_app/login" Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified"
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">http://adfs_domain/adfs/services/trust</Issuer>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
</samlp:Status>
<Assertion ID="_0d711b58-e28a-4315-976d-5a4ec6abb3ab" IssueInstant="2020-03-09T13:27:11.297Z" Version="2.0"
xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
<Issuer>http://adfs_domain/adfs/services/trust</Issuer>
<Subject>
<NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">test_user@domain.com</NameID>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData NotOnOrAfter="2020-03-09T13:32:11.297Z" Recipient="https://mobile_app/login" />
</SubjectConfirmation>
</Subject>
<Conditions NotBefore="2020-03-09T13:27:11.297Z" NotOnOrAfter="2020-03-09T14:27:11.297Z">
<AudienceRestriction>
<Audience>https://doamin/mobile/platform/sso/exchange-token</Audience>
</AudienceRestriction>
</Conditions>
<AttributeStatement>
<Attribute Name="http://schemas.xmlsoap.org/claims/CommonName">
<AttributeValue>test_user@domain.com</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress">
<AttributeValue>test_user@domain.com</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.xmlsoap.org/claims/Group">
<AttributeValue>Domain Users</AttributeValue>
</Attribute>
</AttributeStatement>
<AuthnStatement AuthnInstant="2020-03-09T13:27:11.155Z" SessionIndex="_0d711b58-e28a-4315-976d-5a4ec6abb3ab">
<AuthnContext>
<AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</AuthnContextClassRef>
</AuthnContext>
</AuthnStatement>
</Assertion>
</samlp:Response>
我非常怀疑您得到的是未签名的断言。无论您是否提供证书以允许 AD FS 验证您的应用程序发送到 AD FS 的任何签名请求,您都应该始终获得使用 AD FS 服务器的令牌签名证书签名的令牌。
您应该在 https://adfs_fqdn/federationmetadata/2007-06/federationmetadata.xml. You can use https://adfshelp.microsoft.com/MetadataExplorer/ShowFederationMetadata 发布的联合元数据中看到证书的详细信息,以便更轻松地查看发布的详细信息。
您可以使用 https://adfshelp.microsoft.com/ClaimsXray/TokenRequest 之类的东西来测试 AD FS 返回的负载是什么样的。然后,您可以发送将使用 idp 启动流的 SAML 登录,您将看到 AD FS 返回的原始负载。然后,您可以根据需要切换 SamlResponseSignature 并查看返回的令牌。
我正在尝试使用网络视图通过 https://<adfs_domain>/adfs/ls/idpinitiatedsignon
提取 SAMLResponse 断言。问题是 SAMLResponse 断言未签名且签名未包含在断言中。
因此我无法验证 SAML 断言。我们已使用 ADFS 签名证书配置 ADFS,因为它是 IDP 启动的流程。
我们还在 ADFS 中设置了以下 属性:
SamlResponseSignature = AssertionOnly
<samlp:Response ID="_255ada50-94a5-493a-9234-0e9801f0a994" Version="2.0" IssueInstant="2020-03-09T13:27:11.297Z" Destination="https://mobile_app/login" Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified"
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">http://adfs_domain/adfs/services/trust</Issuer>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
</samlp:Status>
<Assertion ID="_0d711b58-e28a-4315-976d-5a4ec6abb3ab" IssueInstant="2020-03-09T13:27:11.297Z" Version="2.0"
xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
<Issuer>http://adfs_domain/adfs/services/trust</Issuer>
<Subject>
<NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">test_user@domain.com</NameID>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData NotOnOrAfter="2020-03-09T13:32:11.297Z" Recipient="https://mobile_app/login" />
</SubjectConfirmation>
</Subject>
<Conditions NotBefore="2020-03-09T13:27:11.297Z" NotOnOrAfter="2020-03-09T14:27:11.297Z">
<AudienceRestriction>
<Audience>https://doamin/mobile/platform/sso/exchange-token</Audience>
</AudienceRestriction>
</Conditions>
<AttributeStatement>
<Attribute Name="http://schemas.xmlsoap.org/claims/CommonName">
<AttributeValue>test_user@domain.com</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress">
<AttributeValue>test_user@domain.com</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.xmlsoap.org/claims/Group">
<AttributeValue>Domain Users</AttributeValue>
</Attribute>
</AttributeStatement>
<AuthnStatement AuthnInstant="2020-03-09T13:27:11.155Z" SessionIndex="_0d711b58-e28a-4315-976d-5a4ec6abb3ab">
<AuthnContext>
<AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</AuthnContextClassRef>
</AuthnContext>
</AuthnStatement>
</Assertion>
</samlp:Response>
我非常怀疑您得到的是未签名的断言。无论您是否提供证书以允许 AD FS 验证您的应用程序发送到 AD FS 的任何签名请求,您都应该始终获得使用 AD FS 服务器的令牌签名证书签名的令牌。
您应该在 https://adfs_fqdn/federationmetadata/2007-06/federationmetadata.xml. You can use https://adfshelp.microsoft.com/MetadataExplorer/ShowFederationMetadata 发布的联合元数据中看到证书的详细信息,以便更轻松地查看发布的详细信息。
您可以使用 https://adfshelp.microsoft.com/ClaimsXray/TokenRequest 之类的东西来测试 AD FS 返回的负载是什么样的。然后,您可以发送将使用 idp 启动流的 SAML 登录,您将看到 AD FS 返回的原始负载。然后,您可以根据需要切换 SamlResponseSignature 并查看返回的令牌。