首页 文章

ServiceStack令牌认证

提问于
浏览
3

首先是关于我的申请的一些信息我必须通过webservices公开数据访问,我选择ServiceStack来做到这一点 . 由于我不想拥有有状态的web服务,所以我选择使用Jwt令牌来处理用户授权 . 客户端从服务调用中验证并获取令牌,然后将toekn放入Authorization标头中,并且每个请求都会验证它 .

在我的服务中,执行呼叫的授权不仅仅是检查用户是否登录,而是从reuqest到请求不等,例如:

  • 检查权限A.

  • 检查对象O1上的权限A.

  • 检查对象O2上的权限B.

其中一些检查可以使用其他在服务中强制执行的请求过滤器,因为它们依赖于请求中传递的数据 .

我关心的是除了从数据库中提取用户权限所需的行程之外,还在授权的所有级别中从标头中验证令牌和提取值 . 所以我正在寻找一种方法来根据每个请求管理令牌 .

我想出的是一个TokenAuthorizaionManager,它能够从请求中提取和修改令牌 . 我在具有Request范围的容器中注册此类

container.RegisterAutoWired<TokenAuthorizationManager>().ReusedWithin(ReuseScope.Request);

然后我有一个PreRequest过滤器从容器中获取令牌授权管理器并从头部加载数据令牌

PreRequestFilters.Add((req, res) =>
        {
            var tokenManager = req.TryResolve<TokenAuthorizationManager>();
            if (tokenManager != null)
                tokenManager.ExtractTokenInfo(req);
        });

此时,在任何授权/身份验证步骤中,我都使用相同的TokenAuthorizationManager来验证权限和角色 .

这是我可以处理这样的事情的最佳方式,还是在使用无会话服务的服务堆栈中有更好的代币身份验证替代方案?

其他信息:

  • 我有不同类型的用户需要的不仅仅是用户名/密码才能进行成功的身份验证,因此我不想使用servicestack身份验证功能 .

  • 我的网络客户端将是一个angularjs应用程序(如果我设法将所有内容粘在一起)

感谢您对这些主题的任何启发 .

1 回答

  • 0

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

    我还实现了一个带有ServiceStack的身份验证提供程序,在预请求过滤器上读取输入数据,就像你一样 . 我们的客户端也是用Angular开发的,我们为http客户端设置了一个拦截器,设置了Authorization标头(我们使用Restangular更具体) .

    预请求筛选器允许您授予未授权用户未达到服务的权限 . 对于您可能希望根据其他权限标准授权每个服务的更复杂的授权模式,我通常使用请求属性 .

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

相关问题