Web Api 2 & OWIN:针对客户端授权用户

Web Api 2 & OWIN: Authorizing a user against a client

我们正在开发 AngularJS 具有 ASP.NET Web Api 2 REST API 的单页应用程序。我们正在使用 OWIN 中间件和 OAuth。

我们的系统由客户和用户组成:

目前,我们在每个控制器中使用以下检查:

[Route("api/clients/{clientId}/orders/{orderId}")]
public IHttpActionResult GetOrder(int clientId, int orderId)
{
    if(UserComponent.GetUser(User.Identity.Name).ClientId != clientId)
    {
        return NotFound();
    }

    // Get order

    return Ok(orderModel);
}

更多详细信息请参见以下序列(参见图表):

  1. 正在为用户获取令牌(还有 returns clientId)。

  2. 正在访问客户端资源。 User/client授权:

    一个。用户有权访问客户端资源,或

    b。用户无权访问客户端资源。

本质上,客户端 A 的用户不应该能够访问客户端 B 的资源。

授权用户访问客户端资源的最佳方式是什么?

我们能否以某种方式将其推迟到 OWIN(可能通过使用声明)?

Claims 是一个不错的选择,因为您可以发送带有令牌的 clientId 并随每个请求发回,然后您可以根据您的数据存储检查带有 clientId 的用户并验证用户对资源的访问权限,这可以是例如通过过滤器完成。

对于用户请求的授权,继承自 AuthorizeAttribute 的自定义授权属性可以完成这项工作,您可以通过此属性装饰您的操作,这将 运行 在您的操作之前根据 clientid 授权您的用户+ 资源或 return 401(未授权)如果用户无权访问。

查看此问题以了解有关自定义授权属性的想法 ASP.NET MVC 4 Custom Authorize Attribute with Permission Codes (without roles)