我们有两个现有的遗留Web应用程序,一个用于使用域内Windows身份验证的Intranet,另一个是Internet应用程序,执行自定义Web表单用户名+密码的身份验证。现在开发了一个新的Web应用程序,并将在互联网上提供给互联网和内联网用户,处理这两种身份验证模型。因此我们决定使用WIF。我们将在Windows Server 2012上使用ASP.NET 4.5 MVC 4。
Intranet身份验证不应该是一个问题,因为我们可以在这里使用ADFS 2.0。
但我们目前还不知道如何解决用户名+密码验证问题。看起来我们需要开发一个自定义UserNameSecurityTokenHandler来验证用户身份,这些用户提供的用户名+密码信息已通过我们的自定义成员资格提供程序进行验证。但我需要整个工作流程的一些帮助......
假设我们有一个针对互联网用户的自定义登录页面;并假设我们设法将互联网用户路由到此登录页面(在ASP.NET MVC中),从这里到有效令牌的缺失部分是什么?接收提供的用户名+密码的表单或MVC控制器操作如何继续触发配置的WIF身份提供商?
答案 0 :(得分:2)
最优雅的解决方案是为外部用户创建另一个STS,让ADFS将其视为身份提供者:
外部用户将被重定向到将使用usr / pwd数据库的IdP STS。内部用户将直接通过ADFS进行身份验证(针对AD)。
在此方案中,ADFS既充当IdP又充当联盟提供商。
为此,您需要将ADFS和IdP(以及应用程序)暴露给互联网。您可以使用的利用会员资格的STS是IdentityServer,它是开源的,您当然可以根据自己的需要进行定制。
使用此架构,您不需要在应用程序中进行任何特殊的自定义/扩展。你需要处理“家庭领域发现”。哪个是知道在哪里验证用户的过程(例如内联网与外联网)。据推测,您可能有不同的网址等。