ServiceStack令牌认证

3
首先介绍一下我的应用程序。我需要通过Web服务公开数据访问,并选择了ServiceStack来实现。由于我不想使用有状态的Web服务,因此选择使用Jwt令牌来处理用户授权。客户端进行身份验证并从服务调用中获取令牌,然后将其放入Authorization标头中,每个请求都会验证它。
在我的服务中,执行调用的授权不仅仅是检查用户是否已登录,而是因请求而异,例如:
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应用程序(如果我能把所有东西都粘在一起)。
感谢您对这些主题所提供的任何帮助。
1个回答

0

我没有看到你可以做出任何改进,实际上在我看来,你正在正确地使用预请求过滤器。

我还使用了一个身份验证提供程序与ServiceStack,在预请求过滤器中读取输入数据,就像你所做的那样。我们的客户端也是用Angular开发的,我们有一个拦截器为http客户端设置授权头(更具体地说,我们使用Restangular)。

预请求过滤器允许您确保非授权用户无法访问服务。对于更复杂的授权方案,您可能希望根据其他权限标准授权每个服务,我通常使用请求属性。

如果我是你,我会检查ServiceStack实现的授权源代码,并尝试从那里开始。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接