在 Servicestack 请求和响应过滤器属性中访问 JWT 令牌中的负载

我正在使用基于 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)。


侃侃尔雅
浏览 76回答 1
1回答

繁星coding

如果您使用的是ServiceStack 的 JWT Auth ProviderIRequest.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如上所示的字典中。
打开App,查看更多内容
随时随地看视频慕课网APP