【问题标题】:Provisioning "new" users with multiple trusted STSes为“新”用户提供多个受信任的 STS
【发布时间】:2011-08-16 16:40:21
【问题描述】:

在使用具有多个安全令牌服务 (STS) 的 Windows Identity Foundation (WIF) 时,是否可以在用户首次访问应用程序之前对其进行配置?

例如,假设我有一个名为 BufferOverrun 的网站,用户可以在其中登录并提出/回答问题,并且我想支持使用外部 Google 帐户进行身份验证。当用户第一次访问该页面时,他们必须使用他们的 Google 帐户进行身份验证,然后他们才能访问 Web 应用程序。在这种情况下,有两个 STS,Google(用于身份验证)和一个自定义的用于我的应用程序(用于授权)。

如何在用户访问系统之前将声明分配给用户?

由于身份在我的应用程序外部拥有,因此我无法将声明直接分配给该身份(而且我也不想这样做,因为它们是特定于应用程序的)。但是由于用户没有访问系统,我没有内部身份来分配声明。我看到了两种可能的解决方案:

  1. 等待用户访问系统(创建一些默认的特定于应用程序的声明),然后使用一些内部配置工具根据需要修改这些声明。
  2. 让配置工具允许用户在通过手动输入身份进行身份验证之前手动映射默认身份声明(例如电子邮件地址),以便在首次访问时,如果身份声明该声明,一组特定的应用程序索赔被批准。

我发现 1 和 2 都有一些问题。对于 1,所有用户都可以隐式访问系统,即使默认应用程序声明不允许任何功能。这似乎对于像 stackoverflow 这样的初始帐户具有特定权限集的东西非常有效,并且当用户使用系统时,会授予新的声明。然而,这可能不是所有应用程序都希望的。 2 容易出错,因为它需要管理员手动指定声明。

在上述两种情况下,我如何配置有权实际使用配置工具的身份(即管理员帐户)?

为此,我设想在应用程序安装期间,我要求用户进行身份验证并将该身份的应用程序声明设置为具有“管理”权限。这是一个好的实现吗?

从历史上看(我现在指的是现有应用程序),该应用程序专门与 Active Directory 交互。处理这种情况的方式是有一个内置的管理员帐户(不隶属于 AD),允许管理员用户首先登录。在使用管理应用程序进行身份验证后,该用户可以在 AD 中搜索用户/组并单独配置它们。管理员未配置的任何用户/组根本无法访问系统。我不认为这种范式适用于使用像 Google 等外部 STS,所以我试图构想一种能够启用外部 STS 系统的架构。希望保留搜索 STS 的能力,但不是必需的。实际上,所涉及的两个 STS 很可能都是使用联合服务的 Active Directory。

注意:这类似于this questionthis question

【问题讨论】:

    标签: authorization windows-identity sts-securitytokenservice wif


    【解决方案1】:

    在使用具有多个安全令牌服务 (STS) 的 Windows Identity Foundation (WIF) 时,是否可以在用户首次访问应用程序之前对其进行配置?

    答案是肯定的,如果您有办法识别这些用户(例如他们的电子邮件)

    在这种情况下,有两个 STS,Google(用于身份验证)和一个自定义的用于我的应用程序(用于授权)。

    这是经常使用的,但不一定总是如此。如果您只依赖 Google,那么您可以简单地在应用程序本身中拥有授权代码(例如“AuthorizationManager”类等)。另一个 STS 的价值在于它可以成为多个身份(例如 Google、LiveID、Yahoo! 等)的代理并且您可以进行一些与授权相关的转换。

    由于身份在我的应用程序外部拥有,我不能直接将声明分配给该身份(我也不想这样做,因为它们是特定于应用程序的)。

    为什么不呢?您可以定义一条规则:

    “通过 Google 验证的任何人都是 App BufferOverrun 中的‘读者’”。你甚至可以说:

    “someone@gmail.com 是 BufferOverrun 上的‘读者’”,在有人访问该应用之前。

    您仍然可以使用原始方法(用于设置的带外管理员帐户)。或者,您也可以在配置期间“引导”配置,定义哪些声明将识别管理员用户。

    查看http://claimsid.codeplex.com 中的示例“与多个合作伙伴和 ACS 联合”(示例 7) 我们正是这样做的。

    【讨论】:

    • 电子邮件是唯一常用的方法吗?我假设您需要使用所有受支持的 STS 提供商通用的声明 - 电子邮件似乎是一个不错的选择。话虽如此,使用电子邮件的一个问题是您必须单独配置每个用户。将此与 AD 进行对比,您可以在其中配置组,并从外部管理将用户添加到该组。您在上面建议的等价物是使用特定 STS 的任何人都被认为具有相同级别的权限 - 这对我来说似乎很奇怪。
    • 该应用程序将具有与其关联的多个权限/授权级别,并且所有用户最终可能会被识别为相同的 STS (ADFS2.0)。我需要能够对用户进行分组/为用户分配角色。电子邮件的另一个缺点是我必须手动输入容易出错的电子邮件。
    • 如果所有用户都在 AD 中,那么您只需发出“组”声明(在 ADFS 中)。 Google 只会为您提供“电子邮件”和“唯一标识符”声明,因此无论如何您都必须完成“注册/配置”步骤。
    • 嗯。因此,按照同样的思路,我可以通过组名(如上面的电子邮件)预先提供,或者等待某人连接并存储声明的组;然后在“管理员”应用程序中添加权限。有道理。
    猜你喜欢
    • 2011-02-14
    • 2013-05-24
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2018-09-08
    • 2012-08-09
    • 2017-09-12
    • 2021-10-10
    相关资源
    最近更新 更多