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