是否有两个依赖方具有共同身份提供商的标准来共享信息?

时间:2018-03-09 11:03:44

标签: single-sign-on saml openid-connect

这是我最近一直在考虑的情况:

  1. 客户有自己的身份提供商(即ADFS)
  2. 我公司的网络应用程序(应用程序A)支持SAML和OpenID Conect
  3. 另一家公司的应用程序(应用程序B)也支持SAML和OpenID Connect
  4. 应用程序A和B都与身份提供程序
  5. 相关联
  6. 可以要求应用程序B的作者进行更改
  7. 应用程序A和B之间有链接。为了从应用程序A到达B,工作流程如下所示:

    1. 用户已登录到应用程序A
    2. 用户点击指向应用B的链接
    3. 用户现在位于应用B登录屏幕
    4. 输入电子邮件地址
    5. 用户被退回到ADFS或类似系统
    6. 用户现在已登录到应用程序B并可以查看资源
    7. 我们希望简化用户体验:

      1. 用户已登录到应用程序A
      2. 用户点击指向应用B的链接
      3. 应用程序B以某种方式检测到用户正在使用SSO并将其重定向到相应的页面
      4. 用户被退回到ADFS或类似系统。希望如果最后一次登录不久以前,用户应该自动进行身份验证。
      5. 用户现已登录到应用程序B并可以查看资源。
      6. 现在,我们认为我们会像以下那样重写我们对应用B的出站链接:https://example.com/redirect?email=user@example.com&url=/the-resource

        这将允许应用程序B检测是否需要SSO,如果没有其他选项,我想我们会这样做。但是,如果有一个已经建立的标准,我会喜欢它,所以我们可以要求其他公司实施相同的标准。

        我知道SSO系统的检测由依赖方决定,所以也许这只是我们必须与应用程序B的作者一起解决的问题。

        是否有RP到RP数据交换的标准,其中两个RP都有一个共同的身份提供者?

4 个答案:

答案 0 :(得分:1)

我担心SAML依赖方/服务提供商没有交换信息的标准。所有协议消息都在声明提供者/身份提供者和依赖方/服务提供者之间。

代替标准,你提出的建议看起来是合理的。

答案 1 :(得分:1)

如果通过“分享信息”表示“提供有关用户IDP的提示”,则会制定一个标准https://ra21.org/。在RA21开始之前,我有一个类似的想法,我在IIW 22(https://www.internetidentityworkshop.com/proceedings.html)分享。这基本上就是你提出的建议:在URL中加入IDP提示。回复是积极的,但很少有人有一个可以使用它的用例。

我注意到我们为OpenIDConnect讨论过的提案(见周二5G,第45页)是发行人......重定向?发行人= [发行人] ...请参阅说明书中的说明理由。

如果您要共享SAML IDP,可以查看http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-metadata-ui/v1.0/cs01/sstc-saml-metadata-ui-v1.0-cs01.pdf§2.2发现提示信息。如果您的SAML IDP在其元数据中包含子元素,那么这将是IDP确定RP如何相互提示的直接方式,并且URL中的值可以是......重定向?DomainHint = [whatever]。 ......已经有好几年了,我记不清了

最后请注意,在网址中发送电子邮件地址会违反如此多的隐私期望。不要将PII放在您的URL中!

答案 2 :(得分:1)

听起来你需要一个“无人问津”的'应用程序B的URL入口点.WAYF =你来自哪里?并且是找出用户与哪个IdP相关联的旧方法。如果用户已在应用程序A中进行了身份验证,则应用程序A将知道该用户的IdP的entityID。用户的IdP也将为他们提供身份验证会话,因为他们已经登录到应用程序A.

所以你可以在申请B中找到:

https://applicationb.com/sso?entityID=https://some.idp.com/shibboleth

然后,应用程序B加载entityID的SAML元数据,并自动将浏览器重定向到与entityID关联的SSO URL,IdP会将用户重定向回应用程序B的SAML使用者端点。用户将看不到另一个登录屏幕(除非他们的IdP会话已过期),而应用程序B将获得自己的一组SAML属性。

在URL中共享属性并不理想,因为应用程序A可能有权查看用户的电子邮件(由IdP发布),但应用程序B可能没有。因此,最好遵循协议,让IdP将属性发布到应用程序B,与应用程序A了解用户的任何内容分开。

A与B共享的唯一事物是用户的IdP的entityID。这允许B开始SAML流并获得自己的属性。

答案 3 :(得分:0)

我认为你走在正确的轨道上。这完全取决于RP是否认为它应该使用IDP,因此当您导航到应用程序B时,您只需要传递足够的上下文,以便它可以做出决定。因此,在这种情况下,“标准”将是前向通道导航到已知端点,其中包含查询字符串或散列中所需的信息。