Azure AD 作为"external provider" ?



我正在尝试构建一个简单的 ASP.Net Core 2.2 Web应用程序,该应用程序允许AzureAD作为"外部提供者"。我在Visual Studio 2019中这样做。

作为一个超级简单的演示项目,我首先创建了一个使用 Azure AD 作为登录提供程序的新项目:

  1. 选择 ASP.NET 核心 Web 应用程序
  2. 选择 Web 应用程序(模型-视图-控制器(
  3. 将身份验证更改为"工作或学校帐户"。它自动填写了我的域名(因为我已登录到VS(

这将创建一个 Web 应用程序,设置为在所有页面上强制实施用户身份验证。当我运行应用程序时,它会转到 Azure AD 并在导航到/home页之前将我登录。

回想一下,我说过我想将 Azure AD 添加为外部提供程序。所以我在Startup.cs中找到了这一行:

services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));

我删除了默认的身份验证方案以防止自动登录,如下所示:

services.AddAuthentication()
.AddAzureAD(options => Configuration.Bind("AzureAd", options));

现在,当我运行该应用程序时,它会导航到Login页面,它给了我一个蓝色的大按钮,让我使用 Azure Active Directory 登录。但是单击该按钮不会让我登录

因此,我搭建了标识页面的基架,并在ExternalLoginGET例程中设置了一个断点。果然,点击蓝色大按钮找到了它的方向。单步执行代码,我看到_signInManager.GetExternalLoginInfoAsync()的调用返回 null

我被卡住了。显然,(未记录的(配置魔术没有正确设置某些东西来满足对GetExternalLoginInfoAsync的调用。

方案是你使用 asp.net 标识与 Azure AD 登录作为外部标识提供者。

应将IdentityConstants.ExternalScheme设置为 Azure AD 身份验证的登录架构,以便可以使用_signInManager.GetExternalLoginInfoAsync()获取外部用户信息:

services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>()
.AddDefaultUI(UIFramework.Bootstrap4)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options => {
options.SignInScheme= IdentityConstants.ExternalScheme;
//other config
});

然后你可以搭建 asp.net 身份的脚手架并修改以满足你的要求,在任何页面触发外部登录(OnPostExternalLogin.cshtml.cs函数(中,就像默认模板("蓝色大按钮"(一样。

相关内容

  • 没有找到相关文章

最新更新