如何使用ADFS使用SAMLResponse?

时间:2019-03-27 13:26:08

标签: saml adfs3.0

我们需要将ADFS设置为服务提供商。因此,我们尝试将saml响应发送到ADFS。我们为索赔提供者,RPT配置了存根,并创建了证书。我们尝试使用RelayState将saml发送到adfs / ls / IdpinitiatedSignon.aspx。

这是Saml Response示例。

<samlp:Response ID="_6bcc31a5-fcc2-46a6-a84d-0df2cb5bed17" Version="2.0" IssueInstant="2019-03-27T12:37:34.839Z" Destination="https://srv2012-test-dc.testdomain.com/adfs/ls/idpinitiatedsignon.aspx" InResponseTo="_728ac076-7b14-4ce2-8efb-ed5c8c9b85f3" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
    <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">anthem.cn.com</Issuer>
    <samlp:Status>
        <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
    </samlp:Status>
    <Assertion ID="_eeaaab87-0fcc-4ec1-93d3-ed623b27130c" IssueInstant="2019-03-27T12:37:41.843Z" Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
        <Issuer>anthem.cn.com</Issuer>
        <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
            <SignedInfo>
                <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
                <Reference URI="#_eeaaab87-0fcc-4ec1-93d3-ed623b27130c">
                    <Transforms>
                        <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                        <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                    </Transforms>
                    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                    <DigestValue>MkByT8QpjpBFszlr74Rx0IZNewk=</DigestValue>
                </Reference>
            </SignedInfo>
            <SignatureValue>AYhBtCEl4CrsgsuWMaLEDP...</SignatureValue>
            <KeyInfo>
                <X509Data>
                    <X509Certificate>MII...</X509Certificate>
                </X509Data>
            </KeyInfo>
        </Signature>
        <Subject>
            <NameID>VALERA</NameID>
            <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
                <SubjectConfirmationData InResponseTo="_728ac076-7b14-4ce2-8efb-ed5c8c9b85f3" NotBefore="2019-03-27T12:32:34.839Z" NotOnOrAfter="2019-03-27T13:37:34.847Z"/>
            </SubjectConfirmation>
        </Subject>
        <Conditions>
            <AudienceRestriction>
                <Audience>https://beta3dev.test.com/</Audience>
            </AudienceRestriction>
        </Conditions>
        <AuthnStatement AuthnInstant="2019-03-27T12:37:41.843Z" SessionIndex="_56b775bf-32a7-4f35-a370-d707a653a5aa">
            <AuthnContext>
                <AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
            </AuthnContext>
        </AuthnStatement>
        <AttributeStatement>
            <Attribute Name="FirstName">
                <AttributeValue>valera</AttributeValue>
            </Attribute>
        </AttributeStatement>
    </Assertion>
</samlp:Response>

这似乎是有效的,我们通过在线验证程序进行了检查,但是ADFS抛出异常:

Microsoft.IdentityServer.Web.UnsupportedSamlResponseException:MSIS7029:SAML响应包含不支持的内容。

所以,问题是: saml怎么了?

P.S。实际上,我们不知道idp引发的方案如何工作。可能有一些最低要求,或者由于我们没有有效的存根,所以我们无法登录。希望获得有关此数据流的更多信息。

1 个答案:

答案 0 :(得分:0)

好的,它现在正在工作。

  1. 在IdP启动的场景中没有请求,因此我们删除了所有InResponseTo属性。
  2. AuthnContext更改为PasswordProtectedTransport。

可以包含名称ID,但不应包含NotBefore属性。