1

我们正在开发一个带有ASP.NET Web Api 2 REST API的AngularJS单页应用程序。我们正在使用OWIN中间件和OAuth。Web Api 2&OWIN:针对客户端授权用户

我们的系统由客户端和用户的:

  • 客户是组织/公司。
  • 用户是这些公司的雇员。 用户属于客户端。

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

[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. 访问客户端资源。用户/客户端授权:

    a。用户被授权访问客户端资源,或者

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

OAuth Sequence Flow

本质,从客户端A的用户应该能够访问从客户B.

什么是授权对客户资源的用户的最佳途径的资源?

我们可以以某种方式推迟到OWIN(也许通过使用声明)吗?

回答

2

声明是一个很好的选择,因为您可以使用令牌发送clientId并将其与每个请求一起发回,然后您可以使用clientId对数据存储检查用户,并验证用户对资源的访问权限,例如通过过滤器完成。

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

检查这个问题有关自定义的想法授权属性ASP.NET MVC 4 Custom Authorize Attribute with Permission Codes (without roles)

+0

究竟会在哪里授权码去? – davenewza 2015-01-21 09:34:09

+0

我编辑了我的答案以提供更多详细信息。 – 2015-01-21 09:55:05