允许用户只访问他/她自己的具有 id 在 Authorize[] middleare .Net Core Api 的资源

问题描述

我在 .Net Core 3.1 Api 中使用基于角色的身份验证。我正在使用 Jwt 令牌和用户声明。基于角色的身份验证工作正常。但是在某些控制器中,我想确保用户获得他/她自己的数据。因为如果员工在请求中发送其他员工 ID,他/她可以获得该资源数据,我不希望那样。

我在令牌中有电子邮件、ID 和角色以及一些其他数据。

我想要的是类似于 [Authorize(Roles="Employee",Id={userId})]

[HttpGet("getUserInventory")]
    //[Authorize(Roles="Employee",Claims.Id={userId})]
    public IActionResult getUserInventory([FromQuery] int userId)
    {
        var inventories = _userInventoryExportService.GetGlobalInventory(userId);
        if(inventories.Success)
        {
            return Ok(inventories.Data);
        }
        return BadRequest(inventories.Message);
    }

解决方法

看看我们在 Curity 创建的这个教程:Securing a .NET Core API。您将在那里看到如何根据 JWT 访问令牌中的声明配置授权。