.net core 无法运行.net core 2.2 api应用程序:未指定authenticationScheme,并且未找到DefaultChallengeScheme
我们正在将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:.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:未指
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上下文)
你可以想一想,对于这个请求,什么是合适的方案