簡體   English   中英

在 Servicestack 請求和響應過濾器屬性中訪問 JWT 令牌中的有效負載

[英]Access Payload in JWT token in Servicestack Request and Response Filter Attributes

我正在使用基於 Servicestack 的 API 對服務和 ERP 軟件進行編程。 在請求過濾器屬性中,我想通過評估給定服務的 ACL 來檢查當前用戶是否有權使用特定服務。 在響應過濾器屬性中,我想過濾服務的結果。

背景:我公司的用戶可以訪問所有客戶及其數據。 然后我有屬於客戶的用戶,這些用戶可能只能看到他們公司的數據。 因此,首先我必須評估用戶是否可以訪問所請求的服務 (CRUD),如果可以,我必須確定用戶實際上可以在 UI 中看到哪些結果數據。

我已經像這樣填充了我的 JWT:

{
  "iat": 1556223131,
  "exp": 1557432731,
  "preferred_username": "sa",
  "cwp_pid": "people/97-A",
  "cwp_bpid": "geschaeftspartners/481-A",
  "cwp_adm": "True",
  "cwp_su": "True"
}

在這些過濾器屬性中,我需要訪問我的聲明 cwp_ 來運行我的響應過濾器,在請求過濾器中我需要訪問 cwp_pid(用戶 ID)。

如果您使用ServiceStack 的 JWT 身份驗證提供程序,您可以使用IRequest.GetJwtToken()擴展方法在請求/響應過濾器中檢索 JWT 令牌,例如:

GlobalRequestFilters.Add((req, res, dto) => {
    string jwt = req.GetJwtToken();

    var jwtProvider = AuthenticateService.GetRequiredJwtAuthProvider();

    IAuthSession session = jwtProvider.ConvertJwtToSession(req, jwt);                
    JsonObject jwtPayload = jwtProvider.GetVerifiedJwtPayload(req, jwt.Split('.'));
});

從那里您可以將 JWT 令牌轉換為用戶會話或提取 JSON 有效負載,如JsonObject字典中所示,如上所示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM