为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
侃侃尔雅 2022-12-31 13:14:57
我正在使用基于 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)。
查看完整描述

1 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

如果您使用的是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如上所示的字典中。


查看完整回答
反对 回复 2022-12-31
  • 1 回答
  • 0 关注
  • 53 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信