Bob*_*lth 6 c# azure asp.net-identity azure-active-directory asp.net-core-2.0
我正在尝试构建一个简单的 ASP.Net Core 2.2 Web 应用程序,允许 AzureAD 作为“外部提供商”。我在 Visual Studio 2019 中执行此操作。
作为一个超级简单的演示项目,我首先创建一个使用 Azure AD 作为登录提供程序的新项目:
这将创建一个 Web 应用程序,设置为在所有页面上强制执行用户身份验证。当我运行该应用程序时,它会转到 Azure AD 并让我登录,然后再导航到该/home页面。
回想一下,我说过我想将 Azure AD 添加为外部提供商。所以我在以下位置找到了这一行Startup.cs:
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
Run Code Online (Sandbox Code Playgroud)
我删除了默认的身份验证方案以防止自动登录,如下所示:
services.AddAuthentication()
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
Run Code Online (Sandbox Code Playgroud)
现在,当我运行该应用程序时,它会导航到该Login页面,并提供一个蓝色大按钮,让我可以使用 Azure Active Directory 登录。但点击该按钮不会让我登录。
因此,我搭建了身份页面,并在ExternalLoginGET 例程处设置了一个断点。果然,点击蓝色大按钮就可以找到那里。单步执行代码,我看到对返回 null 的调用_signInManager.GetExternalLoginInfoAsync()。
我被困住了。显然,(未记录的)配置魔法没有正确设置某些内容来满足对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
});
Run Code Online (Sandbox Code Playgroud)
然后,您可以搭建 asp.net 身份并进行修改以满足您的要求,在任何页面中触发外部登录(OnPost函数中ExternalLogin.cshtml.cs),就像默认模板(“大蓝色按钮”)一样。
| 归档时间: |
|
| 查看次数: |
1257 次 |
| 最近记录: |