3 回答
TA贡献1834条经验 获得超8个赞
文档中有一条重要说明可以解决此问题:
即使身份验证失败,也会调用授权处理程序。
在您的情况下,身份验证失败但您的IsParagemNotOnGoingHandler'HandleRequirementAsync仍在被调用。要解决此问题,您只需让您的处理程序实现对丢失的声明更具弹性。这是完整性的示例:
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, IsParagemNotOnGoingRequirement requirement)
{
if (!context.User.HasClaim(c => c.Type == ClaimTypes.PrimarySid))
return Task.CompletedTask;
...
}
Convert.ToInt32对于声明的值不可转换为int.
TA贡献1845条经验 获得超8个赞
文档中有一条重要说明可以解决此问题:
即使身份验证失败,也会调用授权处理程序。
在您的情况下,身份验证失败但您的IsParagemNotOnGoingHandler'HandleRequirementAsync仍在被调用。要解决此问题,您只需让您的处理程序实现对丢失的声明更具弹性。这是完整性的示例:
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, IsParagemNotOnGoingRequirement requirement)
{
if (!context.User.HasClaim(c => c.Type == ClaimTypes.PrimarySid))
return Task.CompletedTask;
...
}
Convert.ToInt32对于声明的值不可转换为int.
TA贡献1893条经验 获得超10个赞
在您的 中AuthorizationHandler,您可以通过访问属性来检查用户是否已通过身份验证,context.User.Identity.IsAuthenticated如下所示:
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, YourRequirementType requirement)
{
if (context.User.Identity == null || !context.User.Identity.IsAuthenticated)
{
_logger.LogDebug("Authorization Failed: User not authenticated.");
context.Fail(new AuthorizationFailureReason(this, $"User not authenticated"));
return Task.CompletedTask;
}
- 3 回答
- 0 关注
- 129 浏览
添加回答
举报