首先介紹一下我的應用程序。我必須通過webservices公開數據訪問,並且我選擇了ServiceStack來實現這一點。由於我不想有有狀態的web服務,我選擇使用Jwt令牌來處理用戶授權。客戶端進行身份驗證並從服務調用中獲取令牌,然後將該客戶端放入授權標頭中,並且每個請求都會對其進行驗證。ServiceStack令牌認證
在我的服務執行呼叫授權不僅僅是如果用戶登錄或沒有,但來自reuqest不同要求,例如檢查:
- 檢查權限的
- 檢查權限上對象A上對象O1
- 檢查許可乙O2
一些這些檢查可與請求的過濾器等在該服務執行製成,因爲它們取決於噸他在請求中傳遞了數據。
我的擔心是除了從數據庫中提取用戶權限所需的行程之外,還需要驗證令牌和從授權的所有級別中的頭部提取值。所以我正在尋找一種方法來管理每個請求的令牌。
我想到的是一個TokenAuthorizaionManager,能夠從請求中提取和區分令牌。我註冊這個類容器請求範圍
container.RegisterAutoWired<TokenAuthorizationManager>().ReusedWithin(ReuseScope.Request);
然後,我有一個PreRequest過濾器,從容器中得到令牌授權管理器並加載從報頭中的數據令牌
PreRequestFilters.Add((req, res) =>
{
var tokenManager = req.TryResolve<TokenAuthorizationManager>();
if (tokenManager != null)
tokenManager.ExtractTokenInfo(req);
});
此時在任何授權/驗證步驟中,我使用相同的TokenAuthorizationManager來驗證權限和角色。
這是我能處理這種事情的最佳方式,還是在服務堆棧中使用非會話服務有令牌認證的更好方法?
附加信息:
- 我有不同的需要的不僅僅是用戶名/密碼更做出succesfull認證,所以我不希望使用servicestack身份驗證功能的用戶。
- 我的Web客戶端將是一個angularjs應用程序(如果我管理要堅持一切融合在一起)
感謝您能在這些問題上有何啓示。