【问题标题】:How should mapping of service provider users to identity provider users work?服务提供者用户到身份提供者用户的映射应该如何工作?
【发布时间】:2017-09-13 10:27:23
【问题描述】:

我正在建立一个支持 SAML 的服务提供商。我添加了两个身份提供者——一个是我从 SimpleSAMLphp 构建的自定义提供者,然后是 ssocircle。所以我登录到选定的身份提供者,然后它返回给我的服务提供者,我检查 SAML Auth 对象的属性。我构建的身份提供者返回了我想要的任何东西(显然)。 ssocircle 仅返回电子邮件、名字和姓氏。

所以现在要将其映射到服务提供者的用户,我必须使用身份提供者提供的一些值。所以这让我想知道应该怎么做。由于 ssocircle 只给我电子邮件作为一个有用的价值,我只是使用电子邮件映射到 SP 用户吗?

让我们假设 ssocircle 不验证电子邮件地址。因此,现在如果我在 ssocircle 使用相同的电子邮件创建第二个帐户,我可以以我知道具有管理员权限的同事身份登录。

所以我的问题是,我会处理这个吗?或者设置身份提供者并说“你不应该使用不验证电子邮件地址的身份提供者”的管理员有责任!或类似的东西?或者我应该只允许传递某个值的身份提供者,比如 userid 或 0.9.2342.19200300.100.1.1?有没有身份提供者常用的东西?

【问题讨论】:

    标签: saml service-provider


    【解决方案1】:

    嗯,你说过,两个不同的身份提供者。他们不仅应该传递电子邮件,还应该传递不同的实体 ID 和证书。

    在多租户应用程序中,这意味着两个不同的应用程序,但如果您计划允许多个 IDP 指向一个应用程序,您需要确保相同的电子邮件但不同的 entityID 创建两个不同的用户,或者在之后引发错误第一个已创建,第二个无法提供或访问。

    【讨论】:

    • 我在辨别这两个身份提供者时没有问题,我在尝试为所有身份提供者创建单一代码路径时遇到了麻烦。如果一个只提供电子邮件而另一个只提供一个 id,似乎我必须通过所有身份提供者并查看他们返回的内容并编写自定义代码来接受它。
    • 我的回答是“所以现在如果我使用相同的电子邮件在 ssocircle 创建第二个帐户,我可以以我知道具有管理员权限的同事身份登录”。如果您要接受两种不同类型的 entityID,则需要编写自定义代码。 "
    • 我建议我可以在同一个身份提供商上创建两个帐户。好吧,你用你的电子邮件创建一个帐户,然后我用你的电子邮件创建一个帐户,然后我以你的身份登录,因为 SP 只是假设电子邮件是值得信赖的,即使 idp 确实是决定的人.我可以看到不同 idp 的解决方法,但是同一个 idp 呢?
    • 我可能不明白,但 IDp 应该始终以相同的方式验证每个用户(例如电子邮件或您询问他们的任何 ID),目的是避免:“所以现在如果我创建第二个使用相同的电子邮件在 ssocircle 的帐户,我可以以我知道具有管理员权限的同事身份登录。”作为服务提供商,相同的电子邮件意味着相同的用户。
    • 对,但作为服务提供商,我无法控制身份提供商的安全性或不安全性。我正在尝试设置我的服务以允许用户设置自己的 SAML idp。现在,如果他们使用不验证电子邮件地址的 Frank 的折扣身份提供商,他们就会突然出现一个巨大的安全漏洞。那么答案是“不要使用电子邮件地址”还是“那是设置 idp 问题的用户”?
    【解决方案2】:

    有趣的问题。这些天来,人们总是想到通过某些属性自动联合用户。在早期的 SAML 联合时代,联合两个不相关的用户是一个手动步骤,其中用户登录 IDP 并登录到提供两组凭据的 SP,然后手动联合这两个用户帐户。该过程保证只有在 IDP 和 SP 处有权访问帐户的用户才能控制两者之间的联系。它还允许匿名命名标识符(SAML 持久 NameIDFormat)保护隐私,因为即使是 IDP 也不知道 SP 的用户名,反之亦然。

    不幸的是,这个过程对用户来说很复杂,而且随着 OpenID 的成功,这个方面变得越来越不重要。

    回答您的问题:您所描述的事情发生在现实世界中 - 请参阅 Office 365 authentication bypass

    如果有两个 IDP,您需要检查 IDP 是否有权发送特定属性和属性范围。

    在一个 IDP 的情况下,必须验证属性(SSOCircle 验证电子邮件地址)并且最好是唯一的(例如 SSOCircle userId)以避免两个具有相同属性的用户在 SP 处映射到单个用户。 如果用户 ID 不同(例如,您在 IDP 中使用简单的用户 ID,在 SP 中使用电子邮件地址格式),您仍然可以在 SP 中添加相关属性(例如,名为 ssocircle-userid 的属性)并使用它来链接用户帐户。

    【讨论】:

    • 坦率地说,我发现学习 SAML 是一次非常令人沮丧的经历。似乎这是一个没有人想知道的秘密握手。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 2018-04-05
    相关资源
    最近更新 更多