首页 > 解决方案 > ASP.NET MVC - 是否可以在多个身份验证系统之间进行选择

问题描述

我们有一个 ASP.NET MVC + Angular SPA 存储在 Azure 中的位置(相同的 AppService)。实际上,当我们访问 AppService URL(例如 myapp.customazure.com)时,它会触发 WsFederation 身份验证重定向到合作伙伴网站(外部提供商)。成功登录后,我们的 Home.cshtml 可以运行,这通常是我们的 Angular(我们在其中渲染 Angular javascript 文件)。

我们的 Home.cshtml 看起来像这样:

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>MyApp.Web</title>
    <base href="/">
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Expires" CONTENT="-1">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <link type="image/x-icon" href="favicon.ico" rel="icon" />
    <link type="image/x-icon" href="favicon.ico" rel="shortcut icon" />
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    @Styles.Render("~/styles")
</head>
<body>
    <app-root><div class="spinner"></div></app-root>
    @Scripts.Render("~/runtime")
    @Scripts.Render("~/polyfills")
    @Scripts.Render("~/scripts")
    @Scripts.Render("~/main")
</body>
</html>

WsFederation 配置存在于 Web.config 中,例如:

  <location path="FederationMetadata">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

而且当然

  <!-- Replaced during Azure DevOps Release-->
  <system.webServer>
  </system.webServer>

  <!-- Replaced during Azure DevOps Release-->
  <system.identityModel>
  </system.identityModel>

  <!-- Replaced during Azure DevOps Release-->
  <system.identityModel.services>
  </system.identityModel.services>

我们想要实现的是添加使用另一个选项 (Azure AD B2C) 进行身份验证的可能性。然后最后会有一个新视图 .cshtml 提供两个按钮,让用户在两种身份验证方法之间进行选择:

实现这种事情是否可行?再次感谢你的帮助 !

标签: c#asp.net-mvcazure-ad-b2cws-federation

解决方案


对的,这是可能的。正如您所说,第一页将有两个用于 WsFederation 和 B2C 的按钮。

现在,您必须根据用户按下的按钮将用户重定向到控制器操作方法。

对于MVC 中的 B2C 设置,您可以参考快速入门:使用 Azure Active Directory B2C 为 ASP.NET 应用程序设置登录

此外,如果符合您的要求,请查看使用 WS-Federation 将 Web 应用与 Azure AD 集成。


推荐阅读