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