Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication .Net Core 2.2生成的AzureAD身份验证-无效操作异常:没有身份验证方案和DefaultChallengeScheme?_Authentication_.net Core_Azure Active Directory - Fatal编程技术网

Authentication .Net Core 2.2生成的AzureAD身份验证-无效操作异常:没有身份验证方案和DefaultChallengeScheme?

Authentication .Net Core 2.2生成的AzureAD身份验证-无效操作异常:没有身份验证方案和DefaultChallengeScheme?,authentication,.net-core,azure-active-directory,Authentication,.net Core,Azure Active Directory,我知道在这个一般性的主题上有很多问题和答案,但是对于.NETCore2.2,需要/生成的代码是不同的 如果您使用AzureAD在VisualStudio中创建一个新的.Net Core 2.2项目,并使用域身份验证,您将生成一个非常简单的项目,该项目可以正确进行身份验证。在Startup.cs中,您将在下面找到启用此域AzureAD身份验证的代码,然后相应地使用[Authorize]属性。问题是如果您试图在另一个.NETCore2.2项目中使用它 services.AddAuthenticati

我知道在这个一般性的主题上有很多问题和答案,但是对于.NETCore2.2,需要/生成的代码是不同的

如果您使用AzureAD在VisualStudio中创建一个新的.Net Core 2.2项目,并使用域身份验证,您将生成一个非常简单的项目,该项目可以正确进行身份验证。在Startup.cs中,您将在下面找到启用此域AzureAD身份验证的代码,然后相应地使用
[Authorize]
属性。问题是如果您试图在另一个.NETCore2.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);
我已经将它与正确的设置一起复制到我已经创建的.NETCore2.2项目中。这不是一个轻量级的项目,但不是广泛的和相当简单的。我得到上面的错误,
InvalidOperationException:没有指定身份验证方案,也没有找到DefaultChallengeScheme


所以我想知道这是怎么可能的?Visual Studio生成的.Net Core 2.2项目如何仅使用此代码而其他项目不使用此代码?

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

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

您可以在“授权”属性中选择方案:

[Authorize(AuthenticationSchemes = AzureADDefaults.AuthenticationScheme)]

我来试试这个。当我这样做时,会出现一个异常,说明必须提供
CallBackPath
选项。您知道这可能是在哪里引用的吗?另外,如果我使用上面的方法,我是否总是必须在
[Authorize(authorizationschemes=AzureAddFaults.authorizationScheme)]
属性上选择身份验证方案,或者干脆选择
[Authorize]
就行了?这是AddAzureAd中选项的一部分(options=>options.CallbackPath;我认为您还必须告诉中间件使用身份验证,例如:app.UseAuthentication();请尝试一下,但我认为您必须提供自定义身份验证方案。好吧,我会胡闹。但仍然困扰我的是,如果您使用Visual Studio创建一个全新的Dotnet Core 2.2应用程序,它在
ConfigureServices
下的唯一代码就在上面。因此,我试图理解这是怎么可能的。它没有这似乎不对,但它确实有效。它只对那个项目有效,其他任何地方都不行。