Web Api 2 & OWIN:针对客户端授权用户
Web Api 2 & OWIN: Authorizing a user against a client
我们正在开发 AngularJS 具有 ASP.NET Web Api 2 REST API 的单页应用程序。我们正在使用 OWIN 中间件和 OAuth。
我们的系统由客户和用户组成:
- 客户是organisations/companies。
- 用户是这些公司的雇员。 用户属于一个客户端。
目前,我们在每个控制器中使用以下检查:
[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);
}
更多详细信息请参见以下序列(参见图表):
正在为用户获取令牌(还有 returns clientId)。
正在访问客户端资源。 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)
我们正在开发 AngularJS 具有 ASP.NET Web Api 2 REST API 的单页应用程序。我们正在使用 OWIN 中间件和 OAuth。
我们的系统由客户和用户组成:
- 客户是organisations/companies。
- 用户是这些公司的雇员。 用户属于一个客户端。
目前,我们在每个控制器中使用以下检查:
[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);
}
更多详细信息请参见以下序列(参见图表):
正在为用户获取令牌(还有 returns clientId)。
正在访问客户端资源。 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)