扩展现有(基于 Azure ASP.NET)表单身份验证应用以使用 ADFS 所需的标题步骤



我在Azure上部署了一个现有的 ASP.NET 应用程序。它有自己的身份验证系统,本质上是一个 u/p 数据库表,并创建了一个表单身份验证 cookie:

public void LogIn(LoginDetails userLogin, bool createPersistentCookie)
{
var info = (CustomPrincipalInfo) userLogin;
var timeout = 30;
if (createPersistentCookie)
timeout = 60*24;
var cookie = info.CreateAuthenticationCookie(DateTime.Now, timeout, createPersistentCookie);
HttpContext.Current.Response.Cookies.Add(cookie);
}
public static HttpCookie CreateAuthenticationCookie(this CustomPrincipalInfo info, DateTime current, int timeout, bool remember)
{
var serializer = new JavaScriptSerializer();
var userData = serializer.Serialize(info);
var ticket = new FormsAuthenticationTicket(
1, info.Email, current, current.AddMinutes(timeout), remember, userData);
var secureTicket = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, secureTicket) { Domain = FormsAuthentication.CookieDomain };
if (remember)
cookie.Expires = current.AddMinutes(timeout);
return cookie;
}

大多数客户只是注册详细信息,使用他们的详细信息登录等,但我们被要求与使用 ADFS 进行 SSO 的客户集成。我对这个主题的阅读表明,我们需要运行一个 ADFS 服务器,将我们的应用程序与它集成,然后参与在他们的 ADFS 服务器和我们的服务器之间建立信任的过程

。我很想知道,鉴于它已经托管在 Azure 上,我们是否可以使用 Azure/AAD 做些什么来跳过"运行 ADFS 服务器"部分,因为我们实际上没有任何基础结构来这样做。应用程序启动例程是老式的 Global.asax 风格,使用 Castle windsor 进行 DI/IoC:

public class MvcApplication : HttpApplication
{
protected void Application_Start()
{
DependencyRegistrar.Register();
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
InitializeInfrastructure();
MigrateDatabaseSchema();

DataAnnotationConfig.RegisterValidationAttributes();
BundleConfig.RegisterBundles();
}

我打开的资源通常是较旧的东西:

  • ADFS 与现有的 ASP.Net MVC 应用程序 - 这提到了一个单独的博客深入讨论服务器 2012r2 - 我们确实有这样一个 sevrer,但希望停用它,而不是添加另一个理由继续使用它/必须用更新的替换它

  • 使用 ADFS
  • 的 Azure 网站 SSO 提出了一个 Azure 示例,该示例似乎暗示 Azure 可以帮助我们避免运行专用的 ADFS 服务器,但该示例已有 ~9 年的历史

我发现的最新一个似乎是对我面临的问题的合理描述,但我无法理解答案(基本上似乎是"阅读此链接,向下滚动一点"——阅读链接并没有打我的脸,很明显"这是你必须做的"(

围绕在 Azure 上使用 ADFS 的资源似乎涉及大量内容;我觉得我不需要/想要/为负载均衡器、多个存储帐户、DMZ 和代理等付费。从字面上看,这是一个客户的用户可以每月登录几次

我应该采取哪些步骤来在此现有应用程序中创建真正基本的 ADFS SSO 身份验证机制,挂钩到它如何识别用户,以便当 joe.bloggs@customer.com 通过 ADFS 登录时,我可以意识到已登录的电子邮件地址,并像其他人一样给他他的表单身份验证 cookie, 并利用一些基于 Azure 的工具,这样我就不必运行 ADFS 服务器?

有两种方法可以做到这一点。

基本问题是凭据位于数据库中,AAD 和 ADFS 都不支持此功能。

可以在 Azure 中运行 identityserver4,并将 idsrv4 配置为针对数据库进行身份验证。然后,您可以将 idsrv4 与合作伙伴 ADFS 联合。

或者,可以通过图形 API 将用户移动到 Azure AD,然后将 AAD 与 ADFS 联合。

最新更新