在 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's JWT Auth Provider,您可以使用 IRequest.GetJwtToken() 扩展方法在 Request/Response 过滤器中检索 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 字典中的内容。