我有一个具有核心核心身份登录功能的网络核心Web应用程序可以设置并运行,它可以创建并登录存储在我们数据库中的用户。我的下一步是将Azure Active Directory添加为外部登录方式,并且也可以正常工作,在大多数情况下,我可以登录。
我的问题是,当我添加AAD身份验证时,身份验证的身份方式不再适用于我登录。
理想情况下,Web应用程序将使用ADD对用户进行身份验证,但如果失败,则用户仍可以选择在本地登录以进行身份验证。本质上,ADD将是默认登录,身份将是备份。
我遵循了以下帖子的建议,因为与Add.Cookie文件中添加AddCookie()非常相似,即使与我希望我的Web应用程序执行的操作非常相似,但添加时失败使用以下消息对我进行身份验证:
“我们无法登录。请重试。”
Hybrid authentication in .net core with Open Id Connect and local database
以下是我的Startup.cs文件的样子,我从上面的帖子中删除了AddCookies()调用,这样我可以让ADD重新登录。
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>()
.AddDefaultUI(UIFramework.Bootstrap4)
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
options.Authority = options.Authority + "/v2.0/"; // Microsoft identity platform
options.TokenValidationParameters.ValidateIssuer = false; // accept several tenants (here simplified)
});
services.AddMvc(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
我怀疑这可能与以下调用有关:
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
也许我需要添加其他身份验证选项?我尝试了以下操作,但ADD无法对我进行身份验证,并且从ADD收到了相同的消息:
“我们无法登录。请重试。”
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = AzureADDefaults.AuthenticationScheme;
})
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
我对身份验证还很陌生,非常感谢您的帮助。
答案 0 :(得分:1)
我认为您只需要注册两个身份验证方案。
交换此代码:
services.AddMvc(options =>
{
var policy = new AuthorizationPolicyBuilder(
AzureADDefaults.AuthenticationScheme,
AzureADDefaults.OpenIdScheme)
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
});