【发布时间】:2019-01-11 02:47:09
【问题描述】:
我实现了我的自定义 AuthorizationHandler。 在那我检查我用户可以解决并且是活跃的。
如果用户不活跃,那么我想返回 403 状态。
protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, ValidUserRequirement requirement)
{
var userId = context.User.FindFirstValue( ClaimTypes.NameIdentifier );
if (userId != null)
{
var user = await _userManager.GetUserAsync(userId);
if (user != null)
{
_httpContextAccessor.HttpContext.AddCurrentUser(user);
if (user.Active)
{
context.Succeed(requirement);
return;
}
else
{
_log.LogWarning(string.Format("User ´{1}´ with id: ´{0} isn't active", userId, user.UserName), null);
}
}
else
{
_log.LogWarning(string.Format("Can't find user with id: ´{0}´", userId), null);
}
} else
{
_log.LogWarning(string.Format("Can't get user id from token"), null);
}
context.Fail();
var response = _httpContextAccessor.HttpContext.Response;
response.StatusCode = 403;
}
但我收到了 401。你能帮帮我吗?
【问题讨论】:
-
授权!= 身份验证。 401(未授权)是正确的状态码,而不是 403(禁止)。
-
你是对的!我只尝试了 403 的返回,所以现在我可以通过身份验证来扩展这个方法。
-
HTTP 403 提供了与 HTTP 401 不同的错误案例; HTTP 401 在客户端未认证时返回,并暗示在经过有效认证后可能会返回成功的响应,而当客户端尽管提供了认证(例如已认证帐户的权限不足)仍不允许访问资源时,则返回 HTTP 403 . [维基百科]。 403 应该是“授权处理程序”中的状态码。
标签: api authentication asp.net-core .net-core jwt