【问题标题】:Web Api 2 & OWIN: Authorizing a user against a clientWeb Api 2 & OWIN:针对客户端授权用户
【发布时间】:2015-03-19 15:01:43
【问题描述】:

我们正在开发一个带有 ASP.NET Web Api 2 REST API 的 AngularJS 单页应用程序。我们正在使用 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. 为用户获取令牌(也返回 clientId)。

  2. 访问客户端资源。用户/客户授权:

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

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

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

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

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

【问题讨论】:

    标签: asp.net-web-api asp.net-identity asp.net-web-api2 owin asp.net-identity-2


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2020-09-23
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 2013-06-18
      • 2014-11-18
      相关资源
      最近更新 更多