sp启动saml sso身份验证

时间:2019-01-22 08:50:32

标签: authentication single-sign-on saml identity-management

我正在研究SP发起的saml sso,这对我来说是全新的。我浏览了很多文章和视频(维基百科,集中粉笔谈话,中篇文章),但我无法理解其中的一些内容:

  1. saml断言是SAML令牌吗?如果没有,那么它是如何产生的?

  2. 假设我有一个基于saml的IdP和两个启用了saml的SP。现在在纯粹的后期绑定中,当我登录到SP之一然后登录到第二个SP时,第二个SP如何登录?更准确地说,第二个SP如何知道用户已经登录到第一个SP?决定它的参数是什么? (我可以对此获得更多的低级解释)。 IdP是否将数据存储在有关会话的Cookie中,还是我遗漏了其他内容。

如果有任何与此相关的文章,请发布。

谢谢。

2 个答案:

答案 0 :(得分:0)

  1. 是的,断言本身通常是完全可移植的令牌,但是可以通过多种方式将其绑定到请求者的密钥上。

  2. 第二个SP现在已经登录了用户。SP将通过对IDP的身份验证请求将用户重定向到IDP。 IDP通常会在第一次进行身份验证时为用户保存cookie,这不是SAML规定的,但通常是如何完成的。当用户到达IDP时,IDP会查看cookie,如果用户身份验证仍然有效,则IDP会自动向SP发送有效的断言/令牌。通过在身份验证请求中指定ForceAuthn属性,SP可能会覆盖此行为。

对于资源,我会推荐OASIS http://www.oasis-open.org/committees/download.php/27819/sstc-saml-tech-overview-2.0-cd-02.pdf

中的SAML技术概述

答案 1 :(得分:0)

让我先回答您的具体问题:

  

1)saml断言是SAML令牌吗?如果没有,那怎么回事   产生了吗?

-这仅仅是同一事物的术语。 SAML断言和SAML令牌是同一回事。有2个不同的SAML断言/令牌对于您而言很重要。 SAML请求和SAML响应。 SAML请求是从SP发送到SP启动的SAML SSO中的IDP的内容。 SAML响应是作为SP启动的最后部分或在IDP启动的SAML SSO期间从IDP发送到SP的内容。当用户从SP应用程序启动,被重定向到IDP进行身份验证,然后由IDP发送回SP应用程序时,将启动SP。用户开始于IDP并直接进入SP时,将启动IDP。 SAML声明只是已签名,转换为字符串并以64位编码的XML。它们与用户一起从SP重定向到IDP,然后返回。

  

2)假设我有一个基于saml的IdP和两个启用了saml的SP。现在在   纯粹发布绑定,当我登录到SP之一,然后登录到   第二个SP,第二个SP如何登录?更准确地说,   第二个SP如何知道用户已经先登录   SP?决定它的参数是什么? (我能降低一点吗   级别的解释)。 IdP是否将数据存储在cookie中   会议或还有其他我错过的事情。

-这是特定于您的IDP的。作为Centrify中小企业,我可以告诉您Centrify和类似IDP的工作方式。当用户登录IDP时,无论是从SP启动的重定向,其公司计算机上的IWA还是直接登录IDP本身,都将向浏览器添加cookie。在Centrify的情况下,此cookie称为.ASPXAUTH。每次用户登录后进入IDP时,都不会提示他们再次登录。因此,如果用户从SP1开始,被重定向到IDP,登录并被重定向回,则说明IDP已设置了cookie。现在,如果他们转到SP2,则默认情况下,SP还将重定向到IDP,但是由于设置了cookie,IDP将不会再次提示进行身份验证。因此,用户不会注意到重定向,而IDP只会通过适当的SMAL响应将其发送回SP2。所以像这样:

SP1> SAML请求并重定向到IDP>登录到IDP并设置了cookie> SAML响应并重定向回SP1>导航到SP 2> SAML请求并重定向到IDP> Cookie已设置,因此立即重定向回SP SAML响应。

Centrify还具有SP可以使用的API。例如,SP可以对/ security / whoami进行客户端API调用,以查看是否存在有效的ASPXAUTH cookie。因此SP2可以检查有效的cookie,并决定完全重定向,因为cookie已经设置好了。 https://developer.centrify.com/reference-link/securitywhoami

希望这会有所帮助。我在Centrify时用c#编写了一个非常基本的示例。您可以在https://github.com/centrify/CentrifySAMLSDK_CS处找到代码。随时在这里提出更多问题,或者在Twitter https://twitter.com/NickCGamb

上找到我