【问题标题】:Use ASP.Net Core 2 Identity with Azure Ad single tenant authentication将 ASP.Net Core 2 Identity 与 Azure Ad 单租户身份验证结合使用
【发布时间】:2018-10-19 14:27:20
【问题描述】:

我想就一个我不理解的问题从社区获得帮助。 我创建了 asp.net core 2 web 应用程序,我想将应用程序配置为能够通过 aspnetuser 表或使用 O365 公司帐户从应用程序登录。 然后我遵循了 MSDN 网站上包含的网络上描述的多种技术。 应用身份验证工作正常,但 Azure add 返回:加载外部登录信息时出错。 我通过生成身份视图检查了代码内部,应用程序失败了:

 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;
        });

在配置方法中我添加了

app.UseAuthentication();

当我到达我的登录屏幕应用程序(由 VS 搭建)时,一切似乎都是正确的:

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

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

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

提前致谢

【问题讨论】:

  • 嗨,关于我的帖子的一点更新。经过多次测试,我找到了解决方案。我不知道它是否是最好的,但它在我身边工作得很好。我在自己的项目中实现了所有用于身份验证的 AzureAd 类,而没有使用 .Net 核心提供的东西来处理它。希望可能会在下一个版本中修复......
  • 我在使用 .NET Core 3.1 时遇到同样的问题有什么想法吗?

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


【解决方案1】:

解决方案是将cookieschemename 添加为externalscheme。下面是 Startup.cs 文件中的示例代码块。

 services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
            .AddAzureAD(options => { Configuration.Bind("AzureAd", options); options.CookieSchemeName = IdentityConstants.ExternalScheme; });

【讨论】:

    【解决方案2】:

    不幸的是,我或多或少遇到了完全相同的问题。尽管the Azure sample 可以单独工作,但当我尝试将其集成到使用身份和其他外部身份验证服务的现有应用程序中时,我无法让 AzureAD 工作。有趣的是,虽然在输出窗口中我可以看到日志消息表明登录已完成。

    我所做的(这更多是一种解决方法,而不是问题的确切解决方案)是放弃使用 Microsoft.AspNetCore.Authentication.AzureAD.UI 包,我选择走更长的路并手动配置 OpenID对于 Azure。 This 文章在这方面帮助了我很多。

    话虽如此,我希望有人能更直接地回答你的问题。

    【讨论】:

      猜你喜欢
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多