【问题标题】:API endpoint that depends of the Authenticated user取决于经过身份验证的用户的 API 端点
【发布时间】:2019-02-11 18:11:11
【问题描述】:

我有以下实体:

public class Company { 
  public Int32 CompanyId { get; set; }
  public String Name { get; set; }
} 

public class Project { 
  public Int32 ProjectId { get; set; }
  public String Name { get; set; }
  public virtual Company { get; set; }
} 

public class ProjectUser { 
  public Int32 UserId { get; set; }
  public String ProjectId { get; set; }
} 

public class User { 
  public Int32 UserId { get; set; }
  public String Name { get; set; }
} 

我需要创建一个 Api 端点来获取公司的项目:

companies/{companyId}/projects

此 url 有意义,但返回项目应限于:

  1. 项目,在提供的公司中,与当前经过身份验证的用户相关联(ProjectUser);

  2. 如果当前经过身份验证的用户是系统管理员,则在提供的公司中的所有项目。

问题

所以这个请求依赖于经过身份验证的用户...

我应该在请求中发送 UserId,然后在 API 中检查其权限吗?
如果是,网址将如何,例如companies/{companyId}/projects,成为?

或者我应该简单地获取经过身份验证的用户并在 API 中检查其权限,而不在请求中发送 UserId?

【问题讨论】:

    标签: api asp.net-core-webapi api-design


    【解决方案1】:

    后者。您的请求应该被授权,很可能通过发送带有先前获得的访问令牌的 Authorization 标头。您不应该也不需要将用户 ID 与请求一起发送。这将通过用户主体获得,特别是通过NameIdentifier 声明。至于您的资源级授权,您将使用从主体获得的用户 ID 来确保经过身份验证的用户可以访问所述资源,最常见的是通过资源本身的外键。 docs 有更广泛的指南。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-02
      • 2022-08-14
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      相关资源
      最近更新 更多