我应该如何为SAML WebSSO配置文件实现HTTP POST协议绑定?

Joh*_*ohn 13 redirect http-post saml post-redirect-get

我已经使用HTTP POST协议绑定在Web SSO的SAML配置文件之后实现了我的服务提供者和识别提供者.但是,<AuthnStatement>如果来自服务提供商的HTTP POST与身份提供商上的会话无关,身份提供商将如何提供,我感到有点困惑.

有人可以告诉我怎么能做到这一点?

我可以使用的另一种方法是HTTP重定向绑定,但这需要用户代理干预(即浏览器),通常使用User-Agent作为pass-thru中介来促进请求 - 响应消息交换.因此,我宁愿使用HTTP POST,因为消息交换发生在服务器端,因此用户看不到屏幕上发生任何事情.

但是,对于我如何能够将会话与请求联系起来,使用HTTP重定向更有意义.由于通过用户代理促进了HTTP重定向,因此对IdP的请求将具有会话(如果先前已经过身份验证).我没有得到的是如何发送<AuthnRequest>HTTP重定向. 由JST回答

所以我有点困惑,很想听听其他人在做什么.以下是我的问题:

  1. 使用HTTP POST协议绑定IsPassive选项<AuthnRequest>,如何将服务提供者的请求绑定到身份提供者的会话?换句话说,如果POST来自服务提供商(在技术上是匿名会话),身份提供商如何知道谁在提出请求?
  2. 使用HTTP重定向协议绑定,<AuthnRequest>如果我使用HTTP重定向,如何发送到身份提供程序? 由JST回答

UPDATE

如果我在上面的解释中不清楚,请注意混淆.我正在实现IdP和SP(通过插件).IdP是一个现有的应用程序,我希望SP(第三方系统)用于身份验证(即Web SSO).我正在开发一个简单的PoC.SP实际上是第三方Spring应用程序,我正在开发一个插件来执行SAML操作.

我应该提到我正在尝试使用该IsPassive选项,这意味着用户代理在消息交换期间不起作用.它只是启动SAML派对的催化剂.对?考虑到这一点,假设用户在步骤1中是匿名的,那么SP向IdP发送了什么以允许IdP确定用户是否已经过身份验证?由于IsPassive,HTTP POST不会通过User-Agent发送


UPDATE

问题1修订:如何IdP进行解析委托时,AuthnRequset与发送IsPassive的选项?

直接从SAML 2.0配置文件,第15页,第417到419行:

在步骤4中,通过在此配置文件范围之外的某些方式提供的标识来标识主体.

我真正想要的是解释如何实施some means.

小智 19

需要记住的是,IdP上的会话与SP上的会话之间没有任何关联.他们彼此不了解,只能通过SAML消息进行通信.SP启动的SAML SSO的一般步骤是:

  1. 匿名用户访问SP的资源(页面).
  2. SP标识用户需要在IdP进行身份验证.
  3. SP构造AuthnRequest并发送给IdP.
  4. IdP执行某种身份验证,构建SAML响应并发送到SP.
  5. SP验证响应,如果有效,则执行识别SP上的用户所需的任何操作并将其提供给最初请求的资源.

是的,确实需要某种方式将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编码).

希望能回答你的大部分问题.