[英]Implementing Authentication and role based authorization in ASP.NET MVC web API service and MVC client architecture
在為我的Web API(服務)-MVC(客戶端)體系結構項目實施身份驗證/授權方案時,我很難決定一種方法。 即使我已經在Web API項目中實現了基於自定義令牌的身份驗證,但我仍然很難在哪里確切地實現授權(在客戶端或在API本身中)。
架構概述:
已實施身份驗證:
Web API中的基於令牌的身份驗證(使用消息處理程序)-它為經過身份驗證的用戶生成SHA1加密令牌,該令牌需要成為每個HTTP請求標頭中的一部分。
(令牌=用戶名+用戶IP)
受SSL保護的HTTP請求。 (同樣,使用消息處理程序)
當前問題:
我希望,在考慮整個身份驗證/授權概念的同時,我沒有做錯任何事情。 因此,我將不勝感激任何替代方法/建議。
首先,我認為發明自己的身份驗證機制絕不是一個好主意。
要回答您當前的問題:
1通常來說,您總是希望使用身份驗證來保護Api,因為它是您訪問數據的地方。 您的客戶端(MVC應用程序/智能手機)應授權自己訪問您的Api。
2&3因為您使用的是REST Api,所以我建議保持Api無狀態,換句話說,不要保留任何會話信息。 只需在令牌中包括所需的角色數據即可。 例如,您可以使用JSON Web令牌 。
4我將始終使用授權標頭發送授權數據。 在您的DelegatingHandler中(請注意不同的MessageHandler MVC,DelegatingHander HTTP),您可以通過simpy檢索標頭。
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
var authorizationHeader = request.Headers.Authorization;
// Your authorization logic.
return base.SendAsync(request, cancellationToken);
}
有關如何在ajax調用中包括授權標頭的更多信息,請參見: 如何在jQuery和AJAX中使用Basic Auth?
額外信息:
如果您是我,我還將看一下Thinktecture的Identity Server: https : //github.com/thinktecture/Thinktecture.IdentityServer.v2
也許這個答案關於REST服務的身份驗證將幫助您還有: REST服務認證
為什么要創建一個完整的令牌系統(除非您使用某種聯合安全性),否則您將具有表單身份驗證和cookie,一旦設置並返回cookie,瀏覽器就會將cookie與SPA發出的所有AJAX請求一起發送給cookie。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.