ASP.NET Core--基於資源授權

來源:互聯網
上載者:User

標籤:

常授權取決於被訪問的資源。例如一個文檔可以具有作者屬性。僅文檔作者將被允許更新它,所以資源必須從文件庫被載入可以由授權評估之前。這不能與一個授權屬性來完成,因為屬性的評估需要的資料繫結前,在你自己的代碼的地方載入一個動作內的資源運行。相反的聲明授權,屬性的方法,我們必須使用必要的授權,其中一個開發人員稱他自己的代碼中的授權功能。

在代碼中授權

授權是作為一種服務,IAuthorizationService通過該服務集合中註冊,並提供依賴注入的控制器訪問。

公用 類 DocumentController  : 控制器{     IAuthorizationService  _authorizationService ;    公用 DocumentController (IAuthorizationService  authorizationService )    {         _authorizationService  =  authorizationService ;     } }

IAuthorizationService 有兩種方法,一是在那裡你,你通過資源和需求評估名單通過資源和政策名稱和其他。

任務< 布爾>  AuthorizeAsync (ClaimsPrincipal  使用者,                          對象 資源,                          IEnumerable的< IAuthorizationRequirement >  的要求); 任務< 布爾>  AuthorizeAsync (ClaimsPrincipal  使用者,                          對象 資源,                          串 policyName );

要調用該服務的操作中載入的資源,然後調用AuthorizeAsync您需要的過載。例如

公用 非同步 任務< IActionResult >  編輯(的Guid  documentId ){     文檔 的文檔 =  的DocumentRepository 。尋找(documentId );    如果 (檔案 ==  空)    {         返回 新 HttpNotFoundResult ();     }    如果 (等待 authorizationService 。AuthorizeAsync (使用者, 檔案, “EditPolicy的” ))    {         返回 查看(文檔);     }     其他    {         返回 新 ChallengeResult ();     } }
編寫一個資源處理常式

寫作基於資源授權的處理常式是不是太大的不同來寫一個簡單的要求處理。您建立一個需求,然後實現對需求的處理常式,指定要求的資源類型之前也。例如,這可能會接受一個文檔資源將如下所示的處理常式;

公用 類 DocumentAuthorizationHandler  : AuthorizationHandler < MyRequirement , 文檔> {     公眾 覆蓋 任務 HandleRequirementAsync (AuthorizationHandlerContext  背景下,                                                MyRequirement  要求,                                                文檔 資源)    {         //驗證對資源和身份的要求。        返回 任務。CompletedTask ;     } }

不要忘了,你還需要註冊在你的處理ConfigureServices方法;

服務。AddSingleton < IAuthorizationHandler , DocumentAuthorizationHandler >();
操作要求

如果您正在基於例如讀取操作的決定,寫,更新和刪除,您可以使用OperationAuthorizationRequirement類的Microsoft.AspNetCore.Authorization.Infrastructure命名空間。此預建要求類,您可以編寫具有參數化的操作名稱,一個單一的處理常式,而不是為每個操作建立單獨的類。要使用它提供了一些操作的名稱:

公用 靜態 類 操作{     公用 靜態 OperationAuthorizationRequirement  建立 =         新 OperationAuthorizationRequirement  {  名稱 =  “建立”  };     公用 靜態 OperationAuthorizationRequirement  讀 =         新 OperationAuthorizationRequirement    {  名稱 =  “讀取”  };     公用 靜態 OperationAuthorizationRequirement  更新 =         新 OperationAuthorizationRequirement  {  名稱 =  “更新”  };     公用 靜態 OperationAuthorizationRequirement  刪除 =         新 OperationAuthorizationRequirement  {  名稱 =  “刪除”  }; }

然後,您的處理常式,可以實現如下,用一個假設的Document類為資源;

公用 類 DocumentAuthorizationHandler  :    AuthorizationHandler < OperationAuthorizationRequirement , 文檔> {     公眾 覆蓋 任務 HandleRequirementAsync (AuthorizationHandlerContext  背景下,                                                OperationAuthorizationRequirement  要求,                                                文檔 資源)    {         //使用資源,身份和驗證操作        從需求// Name屬性值。        返回 任務。CompletedTask ;     } }

你可以看到處理器上工作OperationAuthorizationRequirement。處理常式中的代碼使得其評估時必須考慮的要求提供Name屬性考慮在內。

打電話給你打電話時需要指定動作的工作資源處理常式AuthorizeAsync在你的行動。例如

如果 (的await  authorizationService 。AuthorizeAsync (使用者, 檔案, 業務,讀)){     返回 查看(文檔); } 其他{     返回 新 ChallengeResult (); }

這個例子檢查使用者是否能夠為當前執行讀操作document執行個體。如果授權成功將返迴文檔的視圖。如果授權失敗返回ChallengeResult將通知任何身分識別驗證的中介軟體授權失敗和中介軟體可以採取適當的響應,例如返回一個401或403狀態代碼,或將使用者重新導向到登入頁面進行互動式瀏覽器用戶端。

ASP.NET Core--基於資源授權

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.