首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ADFS与Spring扩展集成时的问题

ADFS与Spring扩展集成时的问题
EN

Stack Overflow用户
提问于 2014-10-01 05:26:51
回答 3查看 29.1K关注 0票数 10

我正致力于将Spring扩展集成到我们的appliaction中,对于SSO和我们的客户端的一个ADFS2.0作为IDP,我们已经从我们的appliaction生成了Service数据,并将ADFS元数据导入到我们的appliaction.When中,我选择了客户机idp并单击start单一标记,并给出了正确的客户端凭证,我们看到的SAML响应如下:

Saml反应

代码语言:javascript
复制
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"  Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified"  
Destination="https://sso.spire2grow.com:8443/<our application>/saml/SSO" ID="_d7fa7cb7-a858-4d4e-aa4c-bf7a5d11e485" 
InResponseTo="a2icei36d347di68gi33534cc13fd1" IssueInstant="2014-09-30T14:17:21.819Z" Version="2.0"><Issuer 
xmlns="urn:oasis:names:tc:SAML:2.0:assertion"><Clients ADFS trust services URL></Issuer><samlp:Status><samlp:StatusCode 
Value="urn:oasis:names:tc:SAML:2.0:status:Responder"></samlp:StatusCode></samlp:Status></samlp:Response>

但是,我还看到以下异常被抛出,因为服务提供者无法验证消息。

异常消息:

代码语言:javascript
复制
[351545]2014-09-30 19:47:21,714 DEBUG - SAML message intended destination endpoint matched recipient endpoint
[351545]2014-09-30 19:47:21,714 DEBUG - Authentication attempt using org.springframework.security.saml.SAMLAuthenticationProvider
[351545]2014-09-30 19:47:21,715 DEBUG - Error validating SAML message
org.opensaml.common.SAMLException: Response has invalid status code urn:oasis:names:tc:SAML:2.0:status:Responder, status message is null
    at org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.processAuthenticationResponse(WebSSOProfileConsumerImpl.java:113)
    at org.springframework.security.saml.SAMLAuthenticationProvider.authenticate(SAMLAuthenticationProvider.java:82)
    at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156)
    at org.springframework.security.saml.SAMLProcessingFilter.attemptAuthentication(SAMLProcessingFilter.java:84)
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:195)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)

有谁能指出我是不是漏掉了什么东西。

更新:

在看到为这个问题提供的答案之后,我看到了来自ADFS的以下错误。

代码语言:javascript
复制
Microsoft.IdentityServer.Protocols.Saml.SamlProtocolSignatureAlgorithmMismatchException: MSIS7093: The message is not signed with expected signature algorithm. Message is signed with signature algorithm http://www.w3.org/2000/09/xmldsig#rsa-sha1. Expected signature algorithm http://www.w3.org/2001/04/xmldsig-more#rsa-sha256. at Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolManager.ValidateSignatureRequirements(SamlMessage samlMessage) at Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolManager.Issue(HttpSamlRequestMessage httpSamlRequestMessage, SecurityTokenElement onBehalfOf, String sessionState, String relayState, String& newSamlSession, String& samlpAuthenticationProvider, Boolean isUrlTranslationNeeded, WrappedHttpListenerContext context, Boolean isKmsiRequested)

但是在看到这一点之后,我们确实将依赖信任方上的签名算法更改为rsa-sha256,但它仍然显示相同的消息。

我们需要一张真正的rsa-sha256证书吗?自签证书是否正常工作?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-05 13:40:47

ADFS的异常抱怨SAML消息不是用它期望的RSA-SHA1 256签名的,而是用RSA-SHA1签名的。

确保将ADFS中Spring的中继方的签名算法设置为SHA-1。您可以在http://docs.spring.io/autorepo/docs/spring-security-saml/1.0.x-SNAPSHOT/reference/htmlsingle/#chapter-idp-guide-adfs-sp的最后一个要点中找到详细信息

票数 13
EN

Stack Overflow用户

发布于 2014-10-01 08:24:38

Value="urn:oasis:names:tc:SAML:2.0:status:Responder“

请参阅SAML核心规范。上面写着:

urn:oasis:names:tc: SAML :2.0:status:Responder --由于SAML响应程序或SAML权威的错误,无法执行请求。

也就是说,ADFS服务器在解释或回答请求时遇到了问题。IdP应该告诉你问题出在哪里。

票数 7
EN

Stack Overflow用户

发布于 2016-05-18 11:51:50

扩展不支持SHA-256。您可以扩展org.springframework.security.saml.SAMLBootstrap类以提供SHA-256。

重写postProcessBeanFactory方法

代码语言:javascript
复制
public class Bootstrap extends SAMLBootstrap {

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        super.postProcessBeanFactory(beanFactory);
        BasicSecurityConfiguration config = (BasicSecurityConfiguration) Configuration
                .getGlobalSecurityConfiguration();
        config.registerSignatureAlgorithmURI("RSA", SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
        config.setSignatureReferenceDigestMethod(SignatureConstants.ALGO_ID_DIGEST_SHA256);
    }
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26134655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档