.net core 无法运行.net core 2.2 api应用程序:未指定authenticationScheme,并且未找到DefaultChallengeScheme

.net core 无法运行.net core 2.2 api应用程序:未指定authenticationScheme,并且未找到DefaultChallengeScheme,.net-core,azure-active-directory,bearer-token,role-base-authorization,.net Core,Azure Active Directory,Bearer Token,Role Base Authorization,我们正在将Azure Active Directory与React web应用程序集成,后端将是.net core 2.2 API 当前状态:我们可以将React web应用程序的应用程序注册添加到Azure AD中。这样,我们就可以在React web应用程序上成功进行身份验证后进行身份验证并获取承载令牌 我面临的挑战:既然身份验证已经完成,我想使用承载令牌在后端.net核心API上执行授权。然而,我无法获得成功,因为我一直得到以下错误 InvalidOperationException:未指

我们正在将Azure Active Directory与React web应用程序集成,后端将是.net core 2.2 API

当前状态:我们可以将React web应用程序的应用程序注册添加到Azure AD中。这样,我们就可以在React web应用程序上成功进行身份验证后进行身份验证并获取承载令牌

我面临的挑战:既然身份验证已经完成,我想使用承载令牌在后端.net核心API上执行授权。然而,我无法获得成功,因为我一直得到以下错误

InvalidOperationException:未指定身份验证方案,也未找到DefaultChallengeScheme。有人可以帮助解决此问题吗

.net核心api项目的代码段:

在启动文件中:ConfigureServices(IServiceCollection服务)方法

和AuthenticationHandler:

    public class AdminHandler : AuthorizationHandler<AdminRequirement>, IAuthorizationRequirement
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, AdminRequirement requirement)
    {
        //Check user claims for Role
        if (context.User.HasClaim(ClaimTypes.Role, "Admin"))
        {
            context.Succeed(requirement);
        }

        return Task.FromResult(0);
    }
}
公共类AdminHandler:AuthorizationHandler,IAAuthorizationRequirement { 受保护的覆盖任务HandleRequirementAsync(授权HandlerContext上下文,AdminRequirement) { //检查角色的用户声明 if(context.User.HasClaim(ClaimTypes.Role,“Admin”)) { 成功(要求); } 返回Task.FromResult(0); } }
如果您需要指定架构,可能是由于不同类型的身份验证,您应该在Configure()方法中添加以下代码:

 app.Use(async (context, next) =>
        {
            IEnumerable<string> schemes = GetSchemesForRequest(context);
            foreach (string scheme in schemes)
            {
                AuthenticateResult result = await context.AuthenticateAsync(scheme);
                if (!result.Succeeded)
                    continue;

                context.User = result.Principal;
                break;
            }
            await next();
        });
app.Use(异步(上下文,下一步)=>
{
IEnumerable schemes=GetSchemesForRequest(上下文);
foreach(方案中的字符串方案)
{
AuthenticateResult=等待上下文。AuthenticateAsync(方案);
如果(!result.successed)
继续;
context.User=result.Principal;
打破
}
等待下一个();
});
然后在您的方法中:

IEnumerable<string> GetSchemesForRequest(HttpContext context)
IEnumerable GetSchemesForRequest(HttpContext上下文)

您可以考虑该请求的合适方案。

如果需要指定架构,可能是由于不同的身份验证,您应该在Configure()方法中添加以下代码:

 app.Use(async (context, next) =>
        {
            IEnumerable<string> schemes = GetSchemesForRequest(context);
            foreach (string scheme in schemes)
            {
                AuthenticateResult result = await context.AuthenticateAsync(scheme);
                if (!result.Succeeded)
                    continue;

                context.User = result.Principal;
                break;
            }
            await next();
        });
app.Use(异步(上下文,下一步)=>
{
IEnumerable schemes=GetSchemesForRequest(上下文);
foreach(方案中的字符串方案)
{
AuthenticateResult=等待上下文。AuthenticateAsync(方案);
如果(!result.successed)
继续;
context.User=result.Principal;
打破
}
等待下一个();
});
然后在您的方法中:

IEnumerable<string> GetSchemesForRequest(HttpContext context)
IEnumerable GetSchemesForRequest(HttpContext上下文)
你可以想一想,对于这个请求,什么是合适的方案