C# ServiceStack令牌身份验证
首先是关于我的申请的一些信息。我必须通过Web服务公开数据访问,我选择ServiceStack来实现这一点。因为我不想拥有状态完整的Web服务,所以我选择使用Jwt令牌来处理用户授权。客户机验证并从服务调用中获取令牌,然后将toekn放入授权标头中,每个请求都对其进行验证 在“我的服务”中,执行呼叫的授权不仅仅是检查用户是否登录,还因请求而异,例如:C# ServiceStack令牌身份验证,c#,web-services,authentication,servicestack,C#,Web Services,Authentication,servicestack,首先是关于我的申请的一些信息。我必须通过Web服务公开数据访问,我选择ServiceStack来实现这一点。因为我不想拥有状态完整的Web服务,所以我选择使用Jwt令牌来处理用户授权。客户机验证并从服务调用中获取令牌,然后将toekn放入授权标头中,每个请求都对其进行验证 在“我的服务”中,执行呼叫的授权不仅仅是检查用户是否登录,还因请求而异,例如: 检查权限A 检查对象O1上的权限 检查对象O2上的权限B 其中一些检查可以使用请求筛选器进行,其他检查则在服务中强制执行,因为它们取决于请求中传递
container.RegisterAutoWired<TokenAuthorizationManager>().ReusedWithin(ReuseScope.Request);
container.RegisterAutoWired().ReusedWithin(ReuseScope.Request);
然后,我有一个预请求过滤器,它从容器中获取令牌授权管理器,并从头中加载数据令牌
PreRequestFilters.Add((req, res) =>
{
var tokenManager = req.TryResolve<TokenAuthorizationManager>();
if (tokenManager != null)
tokenManager.ExtractTokenInfo(req);
});
PreRequestFilters.Add((请求,请求)=>
{
var tokenManager=req.TryResolve();
if(令牌管理器!=null)
tokenManager.ExtractTokenInfo(请求);
});
此时,在任何授权/身份验证步骤中,我都使用相同的TokenAuthorizationManager来验证权限和角色
这是我处理类似问题的最佳方式,还是在使用无会话服务的服务堆栈中有更好的令牌身份验证替代方案
其他信息:
感谢您对这些主题的介绍。我看不出您有任何改进,事实上,在我看来,您正确地使用了请求前过滤器 我还使用ServiceStack实现了一个身份验证提供程序,它读取请求前过滤器上的输入数据,与您的操作方式相同。我们的客户机也是使用Angular开发的,我们有一个用于http客户机的拦截器,用于设置授权头(更具体地说,我们使用Restangular) 预请求筛选器允许您授予未授权用户未访问服务的权限。对于更复杂的授权模式,您可能希望根据其他权限标准授权每个服务,我通常使用请求属性 如果我是你,我会检查ServiceStack正在实现的授权的源代码,并尝试从那里开始