如何使用Web应用程序作为客户机对SAML依赖方进行身份验证

How to authenticate to a SAML relying party using a Web Application as a client

本文关键字:依赖方 SAML 身份验证 客户机 Web 何使用 应用程序      更新时间:2023-09-26

我研究这个话题已经有一段时间了,没有多少运气。

场景:1. 使用标准表单身份验证登录到Web应用程序。2. 从Web应用程序登录到SAML依赖方。

问题:我考虑使用iFrame对SAML依赖方执行身份验证。这种方法的基本问题是,在完成SAML身份验证流之后,我需要将一个持久的身份验证令牌传输回我的Web应用程序客户机(这个令牌用于我的Web应用程序对SAML依赖方的后续访问)。

。有人能评论一下这是否是正确的方法(安全方面)吗?

。是否有另一种方法可以对配置为SAML依赖方的系统进行基于web的客户端身份验证?

提前感谢,

Saimon

你问的问题是一个基本的联邦问题。就SAML而言,有一个身份提供者(IdP)和一个服务提供者。IdP负责对用户进行身份验证,并向SP web应用程序发出SAML断言。在您的问题中,听起来您的应用程序是希望向SP web应用程序发出SAML断言的IdP(我将您的SAML依赖方解释为SP web应用程序)。请记住,SAML断言专注于一次性使用SP web应用程序的身份验证,其中SAML断言可以包含用于AuthZ的属性。

另一种架构是集成第三方SAML IdP,这样你的应用程序是一个SP,另一个应用程序也是一个SP。两个SP web应用程序都将使用IdP进行AuthN并接收SAML断言。同样,这是关于AuthN和SAML断言中信息的一次性使用。

另一个架构是利用来自IdP服务器的OpenID Connect (OIDC)。主要区别在于令牌可以长期存在,并用于后续的安全API事务。

关于安全性,所有这些协议在为各自的体系结构适当集成时都内置了安全性。

问题是,据我所知:他的应用程序是一个想要访问安全资源的消费者,需要基于SAML的身份验证。

您可以在后台自动进行身份验证,但随后您必须处理双方的CORS(身份提供者和服务提供者)。您的方法更简单,因为它是用户启动的操作,因此不需要CORS。针对您的问题:听起来您的令牌是头的一部分,作为具有特定名称的特殊头。在您的情况下(如果可能的话),更好的方法是:将这个令牌存储在Cookie中。在您的方法中,cookie应该在不同的帧之间共享。然后你的应用程序可以在访问资源时发送cookie。但是要注意:使用JavascriptXMLHTTPREQUEST你需要设置"withCredentials"