【发布时间】:2022-11-09 19:51:09
【问题描述】:
这听起来可能是一个奇怪的问题,但我们的代码中有某种流程,我无法弄清楚发生了什么,需要 .net 社区的帮助
在我们的 startup.cs 中,我们有以下添加身份验证的代码:
public override void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication()
.AddJwtBearer()
.AddCookie("Cookie");
}
当有人调用服务(使用 rest API 调用)时,他必须在 Authorization 标头中提供有效的 AccessToken。
现在,我们有一个 Filter 类,它检查当访问控制器中的给定方法时,用户是否拥有该方法所需的正确声明
这是过滤器类:
namespace Authorization
{
public class ClaimRequirementFilter : IAuthorizationFilter
{
private readonly Claim _claim;
public ClaimRequirementFilter(Claim claim)
{
_claim = claim;
}
public void OnAuthorization(AuthorizationFilterContext context)
{
var hasClaim = context.HttpContext.User.Claims.Any(c =>
string.Equals(c.Type, _claim.Type, StringComparison.OrdinalIgnoreCase)
&& string.Equals(c.Value, _claim.Value, StringComparison.OrdinalIgnoreCase));
if (!hasClaim)
{
context.Result = new UnauthorizedResult();
}
}
}
}
而我们使用它的方式是这样的:
[HttpGet]
[ActionName("GetUsers")]
[ClaimRequirement("api_access", "users.read")]
public async Task<IActionResult> GetUsers()
{
return Ok("Great success!");
}
现在,我想不通的是 HttpContext.User.Claims 如何从 JWT 令牌中获取声明? 我阅读了很多文档和文章,但我无法弄清楚
如果有人有任何数据碎片,这将是一个很大的帮助
谢谢
【问题讨论】: