在服务堆栈请求和响应筛选器属性中访问 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(。

如果您使用的是ServiceStack的JWT Auth Provider,则可以使用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字典。

最新更新