1

我正在尝试为一个 IIS 实例上的两个站点配置 Shibboleth 服务提供程序:

  • 带有静态 HTML 的前端 - 只是 SPA - 例如 site.com
  • 带有 API 的后端 - 只是 REST - 例如 site-api.com

因此,当我打开第一个入口点时,我有 302 响应并重定向到 IdP,在输入凭据后 - 重定向到 site.com/Shibboleth.sso/SAML2/POST 并且一切正常。

我的 SPA 在浏览器中运行并向 site-api.com 发出 AJAX 请求。这是一个问题,因为我有 302 响应并再次重定向到 IdP。如果浏览器发出请求,我没有任何问题,因为会自动重定向到 IdP 浏览器处理。在 IdP 上通过会话 cookie 进行身份验证后,它再次重定向到 site-api.com/Shibboleth.sso/SAML2/POST。

如何在两个站点之间共享会话?如果用户已经在 site.com 上通过身份验证,是否可以在第一次请求到 site-api.com 后不进行重定向。

我已经用于第二个站点:

        <ApplicationOverride id="site-api" entityID="https://site-api.com/shibboleth" />

另外,我为 site-api.com 注册了 ISAPI 和 RequestMap。从技术上讲,它适用于 site.com。

我想我可以通过使用 XML 配置文件中的属性以某种方式共享会话,但对我没有任何作用。请帮忙。:)

4

1 回答 1

0

在 Shibboleth SP 中使用 ApplicationOverride 将辅助应用程序作为单独的服务调用,即您已确定该 entityID 是唯一的。在辅助 API 的情况下,我不会使用 Shibboleth 保护它,也就是说,如果您从已经过身份验证的站点进行 RESTful 调用,为什么要使用 Shibboleth SP(它旨在确保针对 IdP 进行身份验证)来保护它. 我认为您需要重新考虑您的身份验证工作流程......一个更合理的想法:

(1) 使用 SAML/Shibboleth 从 IdP 获取 site.com 的会话,

(2)根据SP会话生成应用会话(查看SAML流程中的Sessions,其实有好几个,不只是一个SP会话)。更不用说 Shibboleth 是为身份验证而不是授权而构建的。

(3) 根据您想要的任何 API 安全机制进行 REST API 调用...即您可以基于 SAML 断言数据构建 JWT,并验证它在 API 端点是否有效,因为您知道证书。

SAML Web 流程并不是真正为 API 构建的,就像您在这里尝试使用它一样……您试图摆脱的 302,这是 SAML 工作流程中的必需品。

于 2019-10-26T19:24:48.163 回答