对于一个我不了解的问题,我想从社区获得帮助。 我创建了asp.net core 2 Web应用程序,我希望将该应用程序配置为能够通过aspnetuser表或使用 O365公司帐户从该应用程序登录。 然后,我遵循了MSDN网站上包含的Web上描述的多种技术。 应用程序身份验证正常,但Azure添加返回:加载外部登录信息时出错。 我通过生成身份视图检查了代码内部,该应用程序失败了:
var info = await _signInManager.GetExternalLoginInfoAsync();
if (info == null)
{
ErrorMessage = "Error loading external login information.";
return RedirectToPage("./Login", new { ReturnUrl = returnUrl });
}
等待_signInManager.GetExternalLoginInfoAsync();返回null并返回错误消息。
该应用程序已在azure AD中正确配置,并且如果我从应用程序中删除身份验证,它也可以在我的应用程序中正常工作。
我将应用中间件配置如下:
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.AddAuthentication(AzureADDefaults.AuthenticationScheme).AddCookie()
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
options.Authority = options.Authority + "/v2.0/";
options.TokenValidationParameters.ValidateIssuer = true;
});
在我添加的configure方法中
app.UseAuthentication();
当我到达登录屏幕应用程序(由VS支撑)时,一切似乎都正确:
具有两种可能的身份验证的登录屏幕:
当我尝试Azure Active Directory方法时出现错误消息:
有人可以解释并帮助我解决这个问题吗?
预先感谢
答案 0 :(得分:5)
解决方案是将cookieschemename添加为externalscheme。下面是Startup.cs文件中的示例代码块。
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => { Configuration.Bind("AzureAd", options); options.CookieSchemeName = IdentityConstants.ExternalScheme; });
答案 1 :(得分:-1)
不幸的是,我或多或少都遇到了完全相同的问题。尽管the Azure sample可以单独工作,但是当我尝试将其集成到使用Identity和其他外部身份验证服务的现有应用程序时,我无法使AzureAD正常工作。有趣的是,尽管在输出窗口中,我仍可以看到记录消息,说明登录已完成。
我所做的(这更多是一种解决方法,而不是确切的解决方案)是放弃使用Microsoft.AspNetCore.Authentication.AzureAD.UI程序包,我选择了更长的方法并手动配置OpenID适用于Azure。 This的文章为此提供了极大帮助。
话虽如此,我希望有人对您的问题发布更直接的答案。