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

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

芮雪风
2023-03-14

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

我已经实现了一个HTTPendpoint(Java servlet),它接收IdP响应和断言,并将用户登录到应用程序中,但如果应用程序正在脱机使用,这当然不起作用。

是否有一种方法可以在浏览器中“处理”SAML响应和断言以提供脱机身份验证?

“离线”是指在没有访问我的应用程序服务器的情况下,可以访问SAML身份提供者。这是因为我的应用程序在云中,而身份提供者在客户的网络中。

共有1个答案

郤玉书
2023-03-14

问题1:是否有一种方法可以在浏览器中“处理”SAML响应和断言以提供脱机身份验证?

答:
否。您不能从浏览器中“处理”SAML响应和断言以提供离线身份验证,因为离线身份验证无法满足以下SAML身份验证或SAML身份联合的两个要求。

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

浏览器将SAML响应和断言从SAML IdP传递到应用程序SAML SP的断言使用者服务endpoint。

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

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

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

问题2:“离线”是指在不访问我的应用程序服务器的情况下,可以访问SAML身份提供者。这是因为我的应用程序在云中,而身份提供者在客户的网络中。

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

例如,我使用本地Shibboleth IdP(客户网络中的SAML IdP)成功登录到Amazon AWS管理控制台(云中的一个应用程序),正如我从本地IdP SAML SSO登录AWS时对另一个StackOverflow问题ExpiredTokenException的回答所示。

总之,您可以使用“身份提供者是客户的网络”来验证“您在云中的应用程序”。但是,应用程序的SAML SP需要“处理”SAML响应和断言,验证SAML响应/断言的签名,并从SAML响应/断言中提取用户信息。

换句话说,您不能依赖web浏览器来“处理”SAML响应和断言,因为web浏览器不能存储SAML IdP的公共证书/密钥来验证SAML响应/断言的签名。

 类似资料:
  • 我尝试使用ETAG从api请求缓存json响应。我调用类似http://localhost:3000/api/config的代码,并获取: Thx响应。

  • 问题内容: 我想在javascript /浏览器中启用ajax响应的缓存。 从jquery.ajax docs : 默认情况下,始终发出请求,但浏览器可能会在其缓存之外提供结果。要禁止使用缓存的结果,请将cache设置为false。如果自上次请求以来未修改资产,则导致请求报告失败,请将ifModified设置为true。 但是,这些地址都没有强制缓存。 动机: 我想在我的初始化函数中放入调用,其中

  • 问题内容: socket.io中有一种方法可以在断开连接的事件中创建超时,然后检查用户是否已重新连接? 这个想法是仅在超时后未重新连接用户时才发出数据/将用户状态保存在数据库中 编辑 :@Are Wojciechowski回答之后,我已经完成了多个标签页和F5洪水处理程序 https://gist.github.com/foohey/7696811 问题答案: 有一个。所以你可以做 我明白了 因此

  • 问题内容: 我正在通过jQuery的getJson()调用跨域Web服务。由于响应对象的大小很大,因此我在Web服务中使用了最大的JSon大小。我已经检查过getJson()提供正确的响应对象。但是仍然没有调用我的回调函数。Firebug表示已超过(firefox)响应大小。 谁能告诉我标准浏览器(例如,Firefox)处理的最大浏览器响应大小限制是多少,以及如何处理该问题? 这是相同的代码段。

  • 我有代理反应应用程序的问题。目标:我有两个反应应用,第一个应用在localhost:3000,第二个在localhost:3001。我想要什么?= 然后url将从localhost:3000更改为localhost:3000/app2,第二个react应用程序将显示url localhost:3001中包含的内容。 我导入了http代理中间件库,并创建了src方向文件setupProxy。js和内

  • 我怎么让它工作?