1

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

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

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

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

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

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

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

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

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

注意:这类似于这个问题这个问题

4

1 回答 1

2

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

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

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

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

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

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

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

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

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

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

于 2011-05-10T16:32:17.773 回答