首先介绍一下我的应用程序。我需要通过Web服务公开数据访问,并选择了ServiceStack来实现。由于我不想使用有状态的Web服务,因此选择使用Jwt令牌来处理用户授权。客户端进行身份验证并从服务调用中获取令牌,然后将其放入Authorization标头中,每个请求都会验证它。
在我的服务中,执行调用的授权不仅仅是检查用户是否已登录,而是因请求而异,例如:
1. 检查权限A 2. 在对象O1上检查权限A 3. 在对象O2上检查权限B
其中一些检查可以使用请求过滤器进行,其他的则在服务中强制执行,因为它们取决于请求中传递的数据。
我的关注点在于验证令牌以及在所有授权级别中从标头中提取值,以及从数据库中提取用户权限所需的时间。因此,我正在寻找一种每个请求管理一个令牌的方法。
我想到的是创建一个TokenAuthorizaionManager类,能够从请求中提取和验证令牌。我在容器中注册这个类,并设置请求范围。
在任何授权/身份验证步骤中,我都使用同一TokenAuthorizationManager来验证权限和角色。
这是处理此类问题的最佳方式吗?还是在没有会话的服务堆栈中有更好的令牌身份验证替代方案?
其他信息: 1.我有不同类型的用户,需要更多的信息才能进行成功身份验证,因此我不想使用servicestack身份验证功能。 2.我的Web客户端将是AngularJS应用程序(如果我能把所有东西都粘在一起)。
感谢您对这些主题所提供的任何帮助。
在我的服务中,执行调用的授权不仅仅是检查用户是否已登录,而是因请求而异,例如:
1. 检查权限A 2. 在对象O1上检查权限A 3. 在对象O2上检查权限B
其中一些检查可以使用请求过滤器进行,其他的则在服务中强制执行,因为它们取决于请求中传递的数据。
我的关注点在于验证令牌以及在所有授权级别中从标头中提取值,以及从数据库中提取用户权限所需的时间。因此,我正在寻找一种每个请求管理一个令牌的方法。
我想到的是创建一个TokenAuthorizaionManager类,能够从请求中提取和验证令牌。我在容器中注册这个类,并设置请求范围。
container.RegisterAutoWired<TokenAuthorizationManager>().ReusedWithin(ReuseScope.Request);
我有一个 PreRequest 过滤器,它从容器中获取令牌授权管理器并从标头加载数据令牌。
PreRequestFilters.Add((req, res) =>
{
var tokenManager = req.TryResolve<TokenAuthorizationManager>();
if (tokenManager != null)
tokenManager.ExtractTokenInfo(req);
});
在任何授权/身份验证步骤中,我都使用同一TokenAuthorizationManager来验证权限和角色。
这是处理此类问题的最佳方式吗?还是在没有会话的服务堆栈中有更好的令牌身份验证替代方案?
其他信息: 1.我有不同类型的用户,需要更多的信息才能进行成功身份验证,因此我不想使用servicestack身份验证功能。 2.我的Web客户端将是AngularJS应用程序(如果我能把所有东西都粘在一起)。
感谢您对这些主题所提供的任何帮助。