将 Windows Identity Foundation (WIF) 与多个安全令牌服务 (STS) 一起使用时,是否可以在用户首次访问应用程序之前对其进行预配?
例如,假设我有一个名为 BufferOverrun 的网站,用户可以在其中登录并提出/回答问题,并且我想支持使用外部 Google 帐户进行身份验证。当用户第一次访问该页面时,他们必须使用他们的 Google 帐户进行身份验证,然后他们才能访问 Web 应用程序。在这种情况下,有两个 STS,Google(用于身份验证)和一个自定义的用于我的应用程序(用于授权)。
如何在用户访问系统之前将声明分配给用户?
由于该身份在我的应用程序外部拥有,因此我无法将声明直接分配给该身份(而且我也不想这样做,因为它们将是特定于应用程序的)。但是由于用户没有访问系统,我没有内部身份来分配声明。我看到两种可能的解决方案:
- 等待用户访问系统(创建一些默认的特定于应用程序的声明),然后使用一些内部配置工具根据需要修改这些声明。
- 让供应工具允许用户在通过手动键入身份进行身份验证之前手动映射默认身份声明(例如电子邮件地址),以便在首次访问时,如果身份断言该声明,则授予一组特定的应用程序声明.
我看到 1 和 2 都有一些问题。对于 1,所有用户都对系统有一些隐式访问,即使默认应用程序声明不允许任何功能。这似乎对于像 stackoverflow 这样的初始帐户具有特定权限集的东西非常有效,并且当用户使用系统时,会授予新的声明。然而,这可能不是所有应用程序都希望的。2 容易出错,因为它需要管理员手动指定声明。
在上述两种情况下,如何配置有权实际使用配置工具的身份(即管理员帐户)?
为此,我设想在应用程序安装期间,我需要用户进行身份验证并将该身份的应用程序声明设置为具有“管理”权限。这是一个很好的实现吗?
从历史上看(我现在指的是现有应用程序),该应用程序仅专门与 Active Directory 交互。处理方式是有一个内置的管理员帐户(不隶属于 AD),允许管理员用户首先登录。在使用管理应用程序进行身份验证后,该用户可以在 AD 中搜索用户/组并单独配置它们。管理员未配置的任何用户/组根本无法访问系统。我认为这种范式不适用于使用像 Google 等外部 STS,因此我试图构想一种能够启用外部 STS 系统的架构。希望保留搜索 STS 的能力,但不是必需的。实际上,所涉及的两个 STS 很可能都是使用联合服务的 Active Directory。