ADFS spring-saml 依赖方没有配置 AssertionConsumerService

Posted

技术标签:

【中文标题】ADFS spring-saml 依赖方没有配置 AssertionConsumerService【英文标题】:ADFS spring-saml No AssertionConsumerService is configured on the relying party 【发布时间】:2015-08-02 06:58:35 【问题描述】:

带有 ADFS idp 的 saml。 rutime 错误,在 adfs idp 中导入 sp 未签名元数据时没有问题,但我在运行时遇到问题:

在 idp 身份验证后,在成功的身份验证中,在 idp 页面上我收到了这样的信任错误:

The request specified an Assertion Consumer Service URL
'https://test.it/au/login' that is not  configured on the relying party     'microsoft:identityserver:test.it'. 
Assertion Consumer Service URL: https://test.it/au/login  Relying party:     microsoft:identityserver:test.it 
that is a prefix match of the AssertionConsumerService URL     'https://test.it/au/login' specified by the request.
This request failed.     

我的 SP METADATA 是这样的:

<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"     ID="test.it" entityID="test.it">
<md:SPSSODescriptor AuthnRequestsSigned="false" 
WantAssertionsSigned="false"     protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:KeyDescriptor use="signing">
<md:AssertionConsumerService         Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" 
Location="https://test.it:443/au/login" index="0" isDefault="true"/>

我可以补充: 如果我从 /adfs/ls/idpinitiatedsignon.htm 启动身份验证过程 我选择了我的 sp 提供商(所以我排除了 saml2p:AuthnRequest 上的问题) 一个帖子重定向到https://test.it/au/lo gin" 我想知道我在 idp 上的端点上怎么会有空格。

我发现这篇文章似乎可以解释 http://social.technet.microsoft.com/wiki/contents/articles/4039.ad-fs-2-0-the-request-specified-an-assertion-consumer-service-url-that-is-not-configured-on-the-relying-party.aspx 简而言之,它说:

有两种选择:

    配置 RP,以便在 AuthnRequest 中不指定 AssertionConsumerService

    配置 RP 以在 AuthnRequest 中发送 AssertionConsumerService 值,该值匹配 AD FS 2.0 中 RP 信任的 Endpoints 选项卡上的 AssertionConsumerService 值。

你怎么看

如果我使用 entityID="https://test.it:443/au/login" 生成元数据 而不是 entityID="test.it" 可以避免这个安全问题?

或者我应该删除 saml:request 中的 AssertionConsumerService(是否可以通过配置)?

还是应该 idp manager 做更好的配置?

【问题讨论】:

【参考方案1】:

我遇到了类似的问题。 我听从了@DanielSmedegaardBuus 的建议,并没有发现消费者的断言。 在我导入到 adfs 的 metadata.xml 中,服务提供者 url 是 http。 如果您尝试手动添加带有 http 的链接,则会显示“仅允许使用 https”。 似乎在导入 xml 时它只是忽略了那些 http url。所以我不得不将我的服务提供商配置为使用 https,然后它就可以工作了。

【讨论】:

【参考方案2】:

不确定这是否与您面临的问题相同,但在我结束时出现相同的错误,问题是我没有在我的服务提供商上添加我的断言端点作为 AD FS 中的 SAML 断言消费者端点身份提供者。

无论如何都值得一试 :) 在 IdP 上的 mmc 中,添加 AD FS 管理单元。然后在AD FS > Relying Party Trusts 下找到您的 SP 配置。我的叫Test SSO。右键单击它,选择 Properties,然后在 Endpoints 选项卡上,检查您的服务提供商断言端点 URL 是否列在 SAML Assertion Consumer Endpoints 下。

我的工作配置是

Endpoint type:        SAML Assertion Consumer
Binding:              POST
Default:              Yes
Index:                0
Trusted URL:          https://1337.local/adfs/ls

Trusted URL 是我在 SP 上的断言端点,即 ADFS 在经过身份验证后发布 SAML 有效负载。

【讨论】:

以上是关于ADFS spring-saml 依赖方没有配置 AssertionConsumerService的主要内容,如果未能解决你的问题,请参考以下文章

什么是 adfs 中的依赖方信任

ADFS 和 Spring-SAML 应用程序之间的循环

关于ADFS Server 2016的Oauth2的几个问题

具有 SSO (SAML) 和 ADFS 的 Java 应用程序

如何使用适用于AWS Cognito的AD FS SAML?

ADFS RelayState