在浏览器中处理 SAML IdP 响应和断言

Process SAML IdP response and assertion in the browser

我有一个具有离线功能的单页 Web 应用程序(即它可以在不访问应用程序服务器的情况下工作)。我需要提供 SAML 身份验证,据我所知,身份提供者将 return 通过 HTTP Post 对我的应用程序服务器的响应。

我已经实现了一个 HTTP 端点 (Java servlet),它接收 IdP 响应和断言并将用户登录到应用程序中,但是当然,如​​果应用程序正在离线使用,这将不起作用.

有没有一种方法可以 "process" 来自浏览器的 SAML 响应和断言以提供离线身份验证?

"offline" 我的意思是无需访问我的应用程序的服务器,就可以访问 SAML 身份提供者。这是因为我的应用程序在云端,而身份提供者在客户的网络中。

问题 1:有什么方法可以 "process" 来自浏览器的 SAML 响应和断言以提供离线身份验证?

回答:
没有。您可以 NOT "process" 来自浏览器内部的 SAML 响应和断言以提供离线身份验证,因为离线身份验证可以 NOT 满足以下是 SAML 身份验证或 SAML 身份联合的两个要求。

(1) SAML 是一种基于 HTTP 的协议,它依赖于使用用户代理(例如 Web 浏览器)将 SAML 请求从 SAML 服务提供商 (SP) 重定向到 SAML 身份提供商 (IdP)并将 SAML 响应从 SAML IdP 重定向到 SAML SP。

浏览器将来自 SAML IdP 的 SAML 响应和断言传送到您应用程序的 SAML SP 处的断言消费者服务端点。

(2) 您的应用程序的 SAML SP 在收到来自 SAML IdP 的 SAML 断言之前不知道用户是谁。

收到 SAML 断言后,SAML SP 需要验证断言是否来自有效的 SAML IdP,然后从断言中解析必要的用户信息(例如,用户名、属性等),以便您的应用程序可以根据SAML响应携带的用户信息授予用户访问权限,并由SAML SP提取。

如果您的应用服务器没有托管 SAML SP,您的应用将无法完成 SAML 身份验证。

问题 2:"offline" 我的意思是无需访问我的应用程序的服务器,就可以访问 SAML 身份提供者。这是因为我的应用程序在云端,而身份提供者在客户的网络中。

回答:
SAML 利用用户代理(例如网络浏览器)将 SAML 请求从 SAML 服务提供商 (SP) 重定向到 SAML 身份提供商 (IdP),并将 SAML 响应从 SAML IdP 重定向到 SAML SP,因此,SAML 允许您的应用程序在云中,而身份提供者在客户的网络中。

例如, 我已经使用本地 Shibboleth IdP(客户网络中的 SAML IdP)成功登录到 Amazon AWS 管理控制台(云中的应用程序),正如我对另一个 Whosebug 问题 .[=11 的回答所表明的那样=]

综上所述,可以使用"the Identity Provider is the customer's network"来认证"your application in the cloud"。但是,您的应用程序的 SAML SP 需要 "process" SAML 响应和断言,验证 SAML 的签名 response/assertion 并从 SAML response/assertion 中提取用户信息。

换句话说,您不能依赖网络浏览器来 "process" SAML 响应和断言,因为网络浏览器无法将 SAML IdP 的 public cert/key 存储到验证 SAML response/assertion.

的签名