API 依赖于经过身份验证的用户的端点

API endpoint that depends of the Authenticated user

我有以下实体:

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 中检查其权限?
如果是,url,例如companies/{companyId}/projects, 变成?

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

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