DDD - 如何在 .NET Core MVC 应用中使用标识正确实现授权服务



我有一个MemoController,它得到了一些备忘录(包括名称,描述,id,userId(。每个备忘录属于一个用户。我创建了一个 API 控制器来按 id 获取备忘录。

[HttpGet("{memoId}")]
[Authorize]
public async Task<ActionResult> Get(Guid memoId)
{
// A way to get user id
//var userId = User.Identity.IsAuthenticated ? Guid.Parse(User.Identity.Name) : Guid.Empty;
var memo = await _memoService.GetByIdAsync(memoId); // Can get memo from other users
if (memo == null) return NotFound();
return Json(memo);
}

每个用户都应该只能访问自己的备忘录。问题是现在用户可以获取属于其他用户的备忘录。是否可以注入类似UserMemoService的东西来从System.Security.Claims获取用户 ID?我想按照 DDD 原则(而不是在控制器的构造函数或更复杂的混乱中实现服务(来做到这一点。

您需要基于资源的授权。有不同的实现,具体取决于您的偏好。例如,您可以实现自己的授权策略,该策略将使用自定义服务来检查请求文档的用户是否与文档所有者相同。

参考: https://learn.microsoft.com/en-us/aspnet/core/security/authorization/resourcebased?view=aspnetcore-2.1&tabs=aspnetcore2x

最新更新