我正在致力于将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的正版证书吗?自签名证书是否正常工作?
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);
}
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应该告诉你问题出在哪里。
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下面的链接在相同的应用