为什么 ADFS 的 SAML 请求中需要签名?
Why signature need in SAML request for ADFS?
以下是发送到 ADFS 的 SAML 请求
<?xml version="1.0" encoding="UTF-8"?>
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="_84e533b7-4310-41de-8ec7-0af7afeb7979" Version="2.0" IssueInstant="2015-12-02T09:44:30Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Destination="https://XXXX.YYYY.ZZZZ/adfs/ls/" AssertionConsumerServiceURL="http://PPP.QQQ.RRR/SPDemo/Consume.aspx">
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">http://XXXX.YYYY.ZZZZ/adfs/services/trust</saml:Issuer>
</samlp:AuthnRequest>
压缩并转换为 Base64String 后,它被重定向到 ADFS。
URL 下面显示了 SAML 请求
但我收到以下错误
正在检查我收到的事件查看器中的详细信息错误
服务器似乎需要签名的 SAML 请求,但我没有在任何地方提到需要签名的 SAML 请求。另外 SignedSamlRequestsRequired 属性 设置为 false
那么,为什么 ADFS 2.0 要求签名的 SAML 请求?
是否需要执行任何操作才能不需要签名的 SAML 请求,或者如果需要,签名 SAML 请求的签名值是多少?
我能够解决它。
问题是 SAML 请求中 issuer 设置错误。
设置合适的发行人后,即http://PPP.QQQ.RRR/SPDemo,如以下 SAML 请求所示,我能够执行 SP 启动的登录,没有任何 ADFS 错误
<?xml version="1.0" encoding="UTF-8"?>
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="_bd613bda-e506-4747-91c7-96a4d75c67fc" Version="2.0" IssueInstant="2015-12-03T05:51:52Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Destination="https://XXXX.YYYY.ZZZZ/adfs/ls/" AssertionConsumerServiceURL="https://PPP.QQQ.RRR/SPDemo//Consume.aspx">
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">http://PPP.QQQ.RRR/SPDemo</saml:Issuer>
</samlp:AuthnRequest>
以前使用错误的发行人是http://XXXX.YYYY.ZZZZ/adfs/services/trust
以下是发送到 ADFS 的 SAML 请求
<?xml version="1.0" encoding="UTF-8"?>
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="_84e533b7-4310-41de-8ec7-0af7afeb7979" Version="2.0" IssueInstant="2015-12-02T09:44:30Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Destination="https://XXXX.YYYY.ZZZZ/adfs/ls/" AssertionConsumerServiceURL="http://PPP.QQQ.RRR/SPDemo/Consume.aspx">
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">http://XXXX.YYYY.ZZZZ/adfs/services/trust</saml:Issuer>
</samlp:AuthnRequest>
压缩并转换为 Base64String 后,它被重定向到 ADFS。 URL 下面显示了 SAML 请求
但我收到以下错误
正在检查我收到的事件查看器中的详细信息错误
服务器似乎需要签名的 SAML 请求,但我没有在任何地方提到需要签名的 SAML 请求。另外 SignedSamlRequestsRequired 属性 设置为 false
那么,为什么 ADFS 2.0 要求签名的 SAML 请求?
是否需要执行任何操作才能不需要签名的 SAML 请求,或者如果需要,签名 SAML 请求的签名值是多少?
我能够解决它。
问题是 SAML 请求中 issuer 设置错误。
设置合适的发行人后,即http://PPP.QQQ.RRR/SPDemo,如以下 SAML 请求所示,我能够执行 SP 启动的登录,没有任何 ADFS 错误
<?xml version="1.0" encoding="UTF-8"?>
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="_bd613bda-e506-4747-91c7-96a4d75c67fc" Version="2.0" IssueInstant="2015-12-03T05:51:52Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Destination="https://XXXX.YYYY.ZZZZ/adfs/ls/" AssertionConsumerServiceURL="https://PPP.QQQ.RRR/SPDemo//Consume.aspx">
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">http://PPP.QQQ.RRR/SPDemo</saml:Issuer>
</samlp:AuthnRequest>
以前使用错误的发行人是http://XXXX.YYYY.ZZZZ/adfs/services/trust