结合使用ASP.Net Core 2身份和Azure广告单租户身份验证

时间:2018-10-19 14:27:21

标签: asp.net-core asp.net-identity azure-active-directory

对于一个我不了解的问题,我想从社区获得帮助。 我创建了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支撑)时,一切似乎都正确:

具有两种可能的身份验证的登录屏幕:

Login screen with two possibilities for authentication

当我尝试Azure Active Directory方法时出现错误消息:

Error message when i try Azure Active Directory method

有人可以解释并帮助我解决这个问题吗?

预先感谢

2 个答案:

答案 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的文章为此提供了极大帮助。

话虽如此,我希望有人对您的问题发布更直接的答案。