我已经使用HTTP POST协议绑定在Web SSO的SAML配置文件之后实现了我的服务提供商和识别提供商。但是,如果来自服务提供商的HTTP POST与身份提供商上的会话无关,身份提供商将如何提供<AuthnStatement>
,我感到有点困惑。
有人可以告诉我怎么能做到这一点吗?
我可以使用的另一种方法是HTTP重定向绑定,但这需要用户代理干预(即浏览器),通常使用User-Agent作为pass-thru中介来促进请求 - 响应消息交换。因此,我宁愿使用HTTP POST,因为消息交换发生在服务器端,因此用户看不到屏幕上发生任何事情。
但是,对于我如何能够将会话与请求联系起来,使用HTTP重定向更有意义。由于通过用户代理促进了HTTP重定向,因此对IdP的请求将具有会话(如果先前已经过身份验证)。 我不知道如何在HTTP重定向上发送 由JST回答 <AuthnRequest>
。
所以我有点困惑,很想听听其他人在做什么。以下是我的问题:
IsPassive
绑定HTTP POST协议绑定,如何将服务提供商提出的请求与身份提供商上的会话联系起来?换句话说,如果POST来自服务提供商(在技术上是匿名会话),身份提供商如何知道谁在提出请求?<AuthnRequest>
?如果我在上面的解释中不清楚,请注意混淆。我正在实现IdP和SP(通过插件)。 IdP是一个现有的应用程序,我希望SP(第三方系统)用于身份验证(即Web SSO)。我正在开发一个简单的PoC。 SP实际上是第三方Spring应用程序,我正在开发一个插件来执行SAML操作。
我应该提到我正在尝试使用<AuthnRequest>
选项来执行此操作,这意味着用户代理在消息交换期间不会发挥作用。它只是启动SAML派对的催化剂。对?考虑到这一点,假设用户在步骤1中是匿名的,那么SP向IdP发送什么以允许IdP确定用户是否已经过身份验证?由于IsPassive,HTTP POST不通过User-Agent
问题1已修订:当IsPassive
选项与AuthnRequset
选项一起发送时,IdP如何解析委托人?
直接从SAML 2.0配置文件,第15页第417行到第419行:
在步骤4中,识别委托人 通过某种方式提供的身份 超出此个人资料的范围。
我真正想要的是解释如何实施IsPassive
。
答案 0 :(得分:19)
要记住的是,IdP上的会话与SP上的会话之间没有任何关联。他们彼此不了解,只能通过SAML消息进行通信。 SP启动的SAML SSO的一般步骤是:
是的,确实需要某种方式将SP的AuthnRequest连接到IdP的响应。 SAML规范涵盖了这一点:SP的AuthnRequest包含ID值,IdP的相应响应必须包含具有该ID值的InResponseTo属性(在其SubjectConfirmationData元素上)。认证请求协议还允许SP将RelayState参数传递给IdP,然后IdP必须与SAML响应一起传递。您(在SP角色中)可以使用该RelayState值来捕获状态信息,从而允许用户中继到最初请求的资源。
这意味着当您实现SP时,您需要一些记录ID和RelayState值的机制,并且您的Response处理需要验证它接收的InResponseTo和RelayState值。您如何选择创建和解释RelayState值取决于您,但请记住,存在长度限制。 (我们使用与本地保存的状态数据相对应的随机GUID值,这具有额外的优点,即不对RelayState值赋予任何暗示。)
IdP如何知道谁在提出请求? AuthnRequest必须包含标识SP的Issuer元素。它还可能包含AssertionConsumerServiceURL(要将响应发送到的URL),或者IdP可能具有Issuer到正确URL的本地映射。
如何使用HTTP重定向发送AuthnRequest?除了使用GET而不是POST之外,使用POST和Redirect发送的AuthnRequest之间的唯一区别是AuthnRequest XML必须被压缩(使用DEFLATE编码)。
希望能回答你的大部分问题。
答案 1 :(得分:3)
约翰,
在您决定编写自己的SAML IDP / SP实施之前,我建议您退后一步并进行更多研究。您似乎将Bindings与Profiles,Unsolicited vs Solicited Web SSO混合在一起,以及SAML要求用户代理(又称浏览器)是IDP和SP之间几乎所有消息的承载者。规范中还有大量信息需要实施,以确保您的解决方案实际上是安全。
我建议从我们的SAML Knowledge Base开始,然后转到OASIS SAML 2.0 Technical Overview以获取有关这些流量的信息。
或者,如果您决定采用同类产品,可以查看我们的PingFederate产品,该产品可以为您启用所有SAML IDP / SP用例。一天。
希望这有帮助 - 伊恩
答案 2 :(得分:1)
与Ian不同,我与生产SAML相关产品的公司无关。但是,我会给出一些类似的建议:退后一步,找出你实施SP或IdP的原因。你真的扮演SP和IdP的角色,或者你真的只是一个或另一个?如果你只是作为IdP实现/行动,那么像PingFederate这样的产品很可能通过配置提供你所需要的一切,而不是要求你编写自定义代码。如果您正在实施SP,那么这样的产品可以帮助您,但它在很大程度上取决于您将其集成到系统的特性。我作为开发人员发言,他已完成IdP和SP实施,并在确定由于我们特定的系统,客户和要求之前评估了几个工具,因此自定义实施是我们的最佳选择。它已经存在超过一年,有几个客户使用它(包括一些使用不同的商业IdP工具)。
如果您可以根据SAML配置文件/绑定识别您的用例,那么您将能够更好地做出购买与构建决策。