如何禁用WSO2 Identity Server的目标参数检查samlp:AuthnRequest?

时间:2015-09-08 14:48:20

标签: wso2is

尝试在wso2 Identity Server 5.0.0 + Service Pack和第三方服务提供商之间设置SAML。遇到类似的问题branding guidelines除了SP无法将Destination参数添加到他们的samlp:AuthnRequest。

更具体一点。我收到的samlp:AuthnRequest看起来像这样:

<samlp:AuthnRequest
AssertionConsumerServiceURL='https://schoolname.academicworks.com/saml/callback'
ID='_388406f0-3581-0133-2bea-0610df7af2db'
IssueInstant='2015-09-04T22:21:32Z'
Version='2.0'
xmlns:samlp='urn:oasis:names:tc:SAML:2.0:protocol'>
<saml:Issuer xmlns:saml='urn:oasis:names:tc:SAML:2.0:assertion'>https://schoolname.academicworks.com/saml-sp</saml:Issuer>
<samlp:NameIDPolicy AllowCreate='true' Format='urn:oasis:names:tc:SAML:2.0:nameid-format:persistent' xmlns:samlp='urn:oasis:names:tc:SAML:2.0:protocol'/>
</samlp:AuthnRequest>

此请求缺少Destination参数。使用此请求,wso2身份服务器会记录以下内容,并且SAML登录失败:

TID: [0] [IS] [2015-09-04 17:46:56,471]  WARN {org.wso2.carbon.identity.sso.saml.processors.SPInitSSOAuthnRequestProcessor} -  Destination validation for Authentication Request failed. Received: [null]. Expected: [https://ourhostname.ourschool.edu:443/samlsso] {org.wso2.carbon.identity.sso.saml.processors.SPInitSSOAuthnRequestProcessor}

我在SAML文档中找不到需要Destination参数的任何地方,但Identity Server当然认为如此。作为帖子我参考笔记,这个检查可以在

的源代码中找到
public class AuthnRequestProcessor
<snip>
// Validate 'Destination'
String idpUrl = IdentityUtil.getProperty(IdentityConstants.ServerConfig.SSO_IDP_URL);
if (authnReqDTO.getDestination() == null
                    || !idpUrl.equals(authnReqDTO.getDestination())) {
                String msg = "Destination validation for Authentication Request failed. " +
                                    "Received: [" + authnReqDTO.getDestination() + "]." +
                                            " Expected: [" + idpUrl + "]";
                log.warn(msg);
                return buildErrorResponse(authnReqDTO.getId(),
                        SAMLSSOConstants.StatusCodes.REQUESTOR_ERROR, msg);
}

这是在文件中:components / identity / org.wso2.carbon.identity.sso.saml / 4.2.1 / src / main / java / org / wso2 / carbon / identity / sso / saml / processors / AuthnRequestProcessor的.java

我可以破解源代码来删除null的检查,但是我会永远保持这个。有没有人遇到过这个?有没有可用的解决方法?服务提供商无法添加此参数。

提前致谢,

约翰

1 个答案:

答案 0 :(得分:3)

Duh,答案是:如果samlp:AuthnRequest未签名,请确保取消选中“在服务提供商处启用身份验证请求中的签名验证”复选框 - &gt;入站身份验证 - &gt; SAML2 Web SSO配置 - &gt;服务提供商页面。

这个错误具有欺骗性,因为你会认为它会掠过丢失的签名,但我想丢失的Destination参数是它命中的第一个错误。

希望在此发布此内容可以挽救别人的悲痛。