0

我们有两个现有的旧 Web 应用程序,一个用于在域内使用 Windows 身份验证的 Intranet,另一个用于执行基于用户名 + 密码的自定义 Web 表单身份验证的 Internet 应用程序。现在开发了一个新的 Web 应用程序,并将在 Internet 上提供给 Internet 和 Intranet 用户,处理两种身份验证模型。因此我们决定使用WIF。我们将在 Windows Server 2012 上使用 ASP.NET 4.5 MVC 4。

Intranet 身份验证应该不是问题,因为我们可以在这里使用 ADFS 2.0。

但是我们目前不知道如何解决用户名+密码认证。看起来我们需要开发一个自定义UserNameSecurityTokenHandler来验证提供用户名 + 密码信息的用户,这些信息通过我们的自定义会员提供程序进行验证。但我需要一些帮助来完成整个工作流程......

假设我们有一个互联网用户的自定义登录页面;并假设我们设法将互联网用户路由到这个登录页面(在 ASP.NET MVC 中),从这里到有效令牌的缺失部分是什么?收到提供的用户名 + 密码的表单或 MVC 控制器操作将如何继续触发配置的 WIF 身份提供程序?

4

1 回答 1

2

最优雅的解决方案是为外部用户创建另一个 STS,并让 ADFS 信任它作为身份提供者:

在此处输入图像描述

外部用户将被重定向到将使用 usr/pwd 数据库的 IdP STS。内部用户将直接通过 ADFS 进行身份验证(针对 AD)。

在这种情况下,ADFS 既充当 IdP 又充当联合提供者

为此,您需要 ADFS 和 IdP(以及应用程序)都暴露在互联网上。您可以使用的利用成员资格的 STS 是IdentityServer,它是开源的,您当然可以根据自己的需要进行定制。

使用这种架构,您不需要在应用程序中进行任何特殊的自定义/扩展。不过,您将需要处理“家庭领域发现”。这是知道在哪里对用户进行身份验证的过程(例如 Intranet 与 Extranet)。据推测,您可能有不同的 URL 等。

于 2012-10-18T17:48:58.483 回答