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

Sustainsys.Saml2在超文本传输协议请求中没有找到Saml2响应

章茂
2023-03-14

我正在努力将Sustainsys.Saml2与Gluu服务器结合起来设置。我使用Sustainsys.Saml2.2.0、Sustainsys.Saml2.Mvc2.2.0和Gluu 3.1.6。我使用的应用程序是针对. NET 4.6.2编译的MVC应用程序。以下是发生的流量:

得到https://localhost:44300/Saml2/SignIn

得到https://lb/idp/profile/SAML2/Redirect/SSO
查询字符串:<br>SAMLRequest=FzHBasmWDIBVHB6D8B2ZLYVTIJCWC FjkGz7rCbY6vUkNiZ5Yw9/tJsg/awXX/pE5 kklTXJj1UQzy7A74PSJF9dq0j K6s RacewkkocakgUnraq3InO8 eu1bfs38jygiDNF6x9luu BwFMVS5U2Kic6AvoptVLK5Mphns6OYLtGvGvKJJKJJJJKKJZKJZR8POGF3JJJYYKYYKKKKJKKKZKKKFZKKJJZKKQ SJJJZJJJWWFyewjrnskaxozoj9uiubgl4odgbtrr1puzz9w3kn3nhqyagwfuvuxsl a47vqz54ipomdlk LC0qTXwznzFWTkeASTNs/oBKcdM1n/0Et5/YfAE=
RelayState=XyC。。。

IDP登录处理等。

POST https://localhost:44300/SAML 2/Acs < br > Body:< br > relay state = XyC...< br> SAMLResponse = PD94...

登录过程结束时的结果是以下异常:

持续系统。Saml2 . exceptions . nosamlresponsefoundexception:在http请求中找不到SAML 2响应

奇怪的是,如果我刷新我的应用程序,异常就会消失,我就正确登录了。

我的朋友。Saml2配置如下:

xml prettyprint-override"><sustainsys.saml2 entityId="https://localhost:44300" returnUrl="https://localhost:44300/Saml2/Acs" minIncomingSigningAlgorithm="SHA1">
    <identityProviders>
      <add entityId="https://lb/idp/shibboleth" signOnUrl="https://lb/idp/profile/SAML2/Redirect/SSO" logoutUrl="https://lb/idp/Authn/oxAuth/logout" allowUnsolicitedAuthnResponse="true" binding="HttpRedirect">
        <signingCertificate storeName="TrustedPeople" storeLocation="LocalMachine" findValue="..." x509FindType="FindByThumbprint" />
      </add>
    </identityProviders>
    <serviceCertificates>
      <add storeName="My" storeLocation="LocalMachine" findValue="..." x509FindType="FindByThumbprint" />
    </serviceCertificates>
</sustainsys.saml2>

更多观察结果:
- 我使用的当前带有 Sustainsys.Saml2 的应用程序在使用 WSO2 或 RedHat SSO 作为 IDP 时工作正常。只是没有使用Gluu服务器。
- 当使用 https://github.com/mcguinness/saml-sp 上的应用程序与Gluu服务器时,连接可以正常工作。

非常感谢您的帮助!

共有1个答案

冯旭
2023-03-14

这可能是由同一个站点cookie问题引起的。当SAML响应被发布到ACSendpoint时,验证代码在接收到的响应中查找与Relaystate匹配的cookie。随着现代浏览器默认为samesite=none,客户端将在跨源post中从Idp发送cookie。如果您进行手动刷新,它将被发送。

请检查SAML2.XYZ(其中XYZ与relaystate参数匹配)是否由客户端在第一个请求中发送。如果没有,这是一个需要在Sustainsys.Saml2.Mvc库中修复的错误。我知道我们在Sustainsys.Saml2.AspNetCore2库中进行了修复,但可能也需要在MVC库中进行修复。

作为一种解决方法,您可以创建一个 http 模块,该模块在 Sutainsys.Saml2.Mvc 库设置 cookie 标头后对其进行更改,以确保 Saml2.XYZ cookie 具有 samesite=none。

 类似资料:
  • 我想知道你对这个概念的看法/意见。如果有替代方案?这是否可行/有益? 据我所知,对于每个http请求,服务器都会执行一些操作并返回http响应。 现在考虑任何场景,我们希望对服务器上运行的进程有更多的控制。 情景1:http请求发送- 在这里,资源被浪费了。 情况2:http请求发送- 在这里,客户端不知道服务器中运行的进程的状态。客户端必须等待,直到它获得超文本传输协议响应。 我的想法是:在初始

  • 我正在使用GWT和Spring controller来管理http流量。有些请求可能需要很长时间,但我希望在超过给定时间时终止请求。 我如何配置超时Spring。我也使用Apache Tomcat 7.0。我试图在tomcat上inrease最大线程,但有一段时间tomcat工作缓慢,因为请求线程不会死。

  • 我有专有的基于http的API要从JMeter测试。不幸的是,API的一些endpoint希望http DELETE方法带有请求体(我知道它的API设计有问题,使用DELETE with request body,但我无法更改该API,需要对其进行测试)。 如何从JMeter测试它?似乎标准的HttpRequest采样器在没有任何警告的情况下默默忽略了我的身体有效载荷。(当我在《邮递员》中尝试它时

  • 我正在努力学习一些关于HTTP的基础知识。我检查了一些HTTP响应头,注意到了两件让我困惑的事情: > 没有缓存控制标头,并且 ETag标头存在。 我理解 ETag 的方式是,客户端将 ETag 中的请求发送到缓存,并且缓存将资源 Etag 与服务器重新验证。但是,如果没有缓存控制标头作为响应,则所有后续请求都直接与服务器进行重新验证并完全省略缓存。是这种情况还是我错过了什么?当响应中不存在缓存控

  • 我只是有一个关于服务中http请求的结构和处理响应的问题。我正在使用Angular2。alpha46 Typescript(刚刚开始测试-我喜欢它…Ps…。感谢所有一直致力于它并通过github作出贡献的人) 因此,采取以下措施: 登录表单。组成部分ts 从这个组件中,我导入了我的userService,它将容纳我的超文本传输协议请求,以登录用户。 使用者服务ts 我想做的是能够处理http请求之

  • 我的LogCat: 签名密钥(sw)为https://api.dropbox.com/1/shares/dropbox/a.jpg?oauth_consumer_key=2f2y1dyuqhp58ek 我对http没有太多经验。。 因为httpPost=新的httpPost(sw);工作正常,这是否意味着基本字符串签名正确? 还是我错过了什么?