.Net Core 2.2生成的AzureAD身份验证-InvalidOperationException:没有authenticationScheme,没有DefaultChallengeScheme?

时间:2019-02-18 16:55:07

标签: authentication .net-core azure-active-directory

我知道关于这个一般主题有很多疑问和答案,但是对于.Net Core 2.2,所需/生成的代码是不同的。

如果使用AzureAD在Visual Studio中使用域身份验证创建新的.Net Core 2.2项目,则会生成一个非常轻便的项目,可以正确进行身份验证。在Startup.cs中,您将在下面找到启用该域AzureAD身份验证的代码,然后相应地使用[Authorize]属性。问题是,如果您尝试在另一个.Net Core 2.2项目中使用它。

services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
                .AddAzureAD(options => Configuration.Bind("AzureAd", options));

            services.AddMvc(options =>
            {
                var policy = new AuthorizationPolicyBuilder()
                    .RequireAuthenticatedUser()
                    .Build();
                options.Filters.Add(new AuthorizeFilter(policy));
            })
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

我已经将其与正确的设置一起复制到了已经创建的.Net Core 2.2项目中。它不是一个项目的轻而易举的事情,但是它并不广泛且非常简单。我收到上面的错误,InvalidOperationException: No authenticationScheme was specified, and there was no DefaultChallengeScheme found

所以我想了解这是怎么可能的? Visual Studio生成的.Net Core 2.2项目如何仅使用此代码,而另一个项目则不能?

1 个答案:

答案 0 :(得分:0)

您可以尝试添加以下内容:

services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = AzureADDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = AzureADDefaults.AuthenticationScheme;
            }).AddAzureAD 

等...

您可以在Authorize属性中选择方案:

[Authorize(AuthenticationSchemes = AzureADDefaults.AuthenticationScheme)]