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 Server 2016的Oauth2的几个问题
具有 SSO (SAML) 和 ADFS 的 Java 应用程序