【问题标题】:Access Payload in JWT token in Servicestack Request and Response Filter Attributes在 Servicestack 请求和响应过滤器属性中访问 JWT 令牌中的有效负载
【发布时间】:2019-04-25 20:15:25
【问题描述】:

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

【问题讨论】:

    标签: c# servicestack


    【解决方案1】:

    如果您使用ServiceStack's 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 字典中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-29
      • 2016-01-19
      • 2021-12-24
      • 2018-12-19
      • 2020-11-01
      • 1970-01-01
      • 2021-01-11
      相关资源
      最近更新 更多