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