servicestack,C#,servicestack" /> servicestack,C#,servicestack" />

C# 在Servicestack请求和响应筛选器属性中访问JWT令牌中的有效负载

C# 在Servicestack请求和响应筛选器属性中访问JWT令牌中的有效负载,c#,servicestack,C#,servicestack,我正在使用基于Servicestack的API编程一个服务和ERP软件。 在请求过滤器属性中,我想通过评估给定服务的ACL来检查当前用户是否有使用特定服务的权限。 在响应过滤器属性中,我想过滤服务的结果 背景:我公司的用户可以访问所有客户及其数据。然后我有属于某个客户的用户,这些用户可能只看到他们公司的数据。 因此,首先我必须评估用户是否有权访问请求的服务(CRUD),如果有,我必须确定用户可能在UI中实际看到的结果数据 我已经像这样填充了我的JWT: { "iat": 1556223131

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

如果使用,则可以使用
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
字典中所示