当前位置: 首页 > 知识库问答 >
问题:

将ADF与Spring SAML扩展集成时的问题

胡利
2023-03-14

我正在致力于将Spring SAML扩展集成到我们的应用程序中,并将SSO与我们客户的一个ADFS2进行集成。0作为IDP,我们已从应用程序生成服务提供商元数据,并将ADFS元数据导入应用程序。当我选择客户端idp并单击start single sign并提供正确的客户端凭据时,我们看到SAML响应如下:

Saml回应。

<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>

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

异常消息:

[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中看到了以下错误。

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的正版证书吗?自签名证书是否正常工作?

共有3个答案

戚衡
2023-03-14

Spring Security SAML扩展不支持defualt提供的SHA-256。你可以扩展组织。springframework。安全山姆。SAMLBootstrap类提供SHA-256。

重写后处理BeanFactory方法

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);
    }
澹台冯浩
2023-03-14

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

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

urn:oasis:names:tc:SAML:2.0:status:Responder由于SAML响应程序或SAML授权机构出错,请求无法执行。

i、 e.ADFS服务器无法解释或回答请求。IdP应该告诉你问题出在哪里。

于嘉许
2023-03-14

ADFS的例外情况是,SAML消息没有使用预期的RSA-SHA256签名,而是使用RSA-SHA1签名。

确保将ADFS中Spring SAML中继方的签名算法设置为SHA-1。你可以在文章的最后一点中找到细节http://docs.spring.io/autorepo/docs/spring-security-saml/1.0.x-SNAPSHOT/reference/htmlsingle/#chapter-idp指南adfs sp

 类似资料:
  • 我最初应该发布我的问题,说明我们的代码使用了一个嵌入式撒克逊扩展函数——撒克逊:解析($xml),它返回xml的根元素/节点。然而,在Saxon-HE中,该扩展不再可用——所以我试图编写一个集成扩展,将xml字符串解析到文档中并返回根元素。 我使用的是Saxon HE 9.5.1.6——我试图编写一个集成的扩展函数,返回文档的根节点。该函数接收一个xml字符串——创建一个文档,并需要将根节点返回给

  • 目前正在做一个游戏,我已经到了需要实现多人游戏功能的地步。我正在尝试将GameSparks SDK加载到我的项目中,但无法正确导入模块,我不太确定发生了什么。 SDK是用Objective C编写的,但我的项目是用Swift编写的。他们说你只需要将文件导入到你的项目中,所以我用cocoapods安装了它,并将源文件复制到我的项目中,我的文件如下所示: 在我的桥接报头中,我有 并且没有错误,一切都编

  • Kubernetes是一个高度开放可扩展的架构,可以通过自定义资源类型CRD来定义自己的类型,还可以自己来扩展API服务,用户的使用方式跟Kubernetes的原生对象无异。

  • 问题内容: 这两个扩展功能有什么区别? 尽管jquery.extend有充分的文档记录,但是angular.extend缺少详细信息,并且注释没有提供答案。(https://docs.angularjs.org/api/ng/function/angular.extend)。 angular.extend是否也提供深层复制? 问题答案: 并且是 非常 相似的。它们都从一个或多个源对象到目标对象进行

  • 我想扩展spring集成消息。我想在消息流经通道期间添加一些头值。 我阅读了MessageHeader的文档,如下所示。我怎样才能得到第三个案例的样本? 创建消息头的一种方法是使用MessageBuilder: MessageBuilder。withPayload(“foo”)。setHeader(“键1”,“值1”)。setHeader(“键2”,“值2”); 第二种选择是创建 组织。sprin

  • 我已经创建了angular应用程序,并根据下面的文档做了相应的更改,并能够加载斯巴达克斯商店。https://sap.github.io/spartacus-docs/building-the-spartacus-storefront-from-libraries/试图通过https://sap.github.io/spartacus-docs/cds-integration下面的链接在相同的应用