0

我正在努力将 Sustainsys.Saml2 与 Gluu 服务器结合使用。我正在使用 Sustainsys.Saml2 2.2.0、Sustainsys.Saml2.Mvc 2.2.0 和 Gluu 3.1.6。我正在使用的应用程序是针对 .NET 4.6.2 编译的 MVC 应用程序。这是发生的网络流量:

获取https://localhost:44300/Saml2/SignIn

GET https://lb/idp/profile/SAML2/Redirect/SSO
QueryString:
SAMLRequest = fZHBasMwDIbvhb6D8b2zlyVtItJCWC+FjkGz7rCbY6vUkNiZ5Yw9/tJsg/awXX/pE5+kklTXJj1UQzy7A74PSJF9dq0j+K6s+RAceEWWwKkOCaKGunraQ3InoQ8+eu1bfs38jygiDNF6x9luu+bWFMVS5U2Kic6aVOpTvlK5MphnS6OylTGcvWKgEVjzkR8pogF3jqJycYzkfbGQ+SJJXmQOqYRMvnG2HdewTsWJOsfYEwjRNsKaXozOJ9uiuBgl4oDGBtRR1PUzZ9Wv3KN3NHQYagwfVuPxsL+a47Vqz54ipOmDlKK+LC0qTXwznzFWTkeASTNs/oBKcdM1n/0Et5/ YfAE=
RelayState = XyC...

IDP登录处理等

POST https://localhost:44300/Saml2/Acs 正文

RelayState = XyC...
SAMLResponse = PD94...

这是完整网络流量的截图: https ://i.stack.imgur.com/NvS20.png提琴手截图

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

Sustainsys.Saml2.Exceptions.NoSamlResponseFoundException:在 http 请求中找不到 Saml2 响应

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

我的 Sustainsys.Saml2 配置如下:

<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 服务器一起使用时,连接正常工作。

任何帮助是极大的赞赏!

4

1 回答 1

0

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

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

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

于 2019-09-05T12:35:30.940 回答