【问题标题】:DDD - How to correctly implement authorization service with Identity in .NET Core MVC appDDD - 如何在 .NET Core MVC 应用程序中使用 Identity 正确实现授权服务
【发布时间】:2018-07-03 18:53:53
【问题描述】:

我有一个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 原则(不在 Controller 的构造函数中实现服务或更复杂的混乱)。

【问题讨论】:

    标签: .net asp.net-core-mvc authorization domain-driven-design


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      • 2019-06-02
      • 2020-07-24
      • 2016-01-16
      • 1970-01-01
      • 2016-08-03
      相关资源
      最近更新 更多