Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ServiceStack令牌身份验证_C#_Web Services_Authentication_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack - Fatal编程技术网 servicestack,C#,Web Services,Authentication,servicestack" /> servicestack,C#,Web Services,Authentication,servicestack" />

C# ServiceStack令牌身份验证

C# ServiceStack令牌身份验证,c#,web-services,authentication,servicestack,C#,Web Services,Authentication,servicestack,首先是关于我的申请的一些信息。我必须通过Web服务公开数据访问,我选择ServiceStack来实现这一点。因为我不想拥有状态完整的Web服务,所以我选择使用Jwt令牌来处理用户授权。客户机验证并从服务调用中获取令牌,然后将toekn放入授权标头中,每个请求都对其进行验证 在“我的服务”中,执行呼叫的授权不仅仅是检查用户是否登录,还因请求而异,例如: 检查权限A 检查对象O1上的权限 检查对象O2上的权限B 其中一些检查可以使用请求筛选器进行,其他检查则在服务中强制执行,因为它们取决于请求中传递

首先是关于我的申请的一些信息。我必须通过Web服务公开数据访问,我选择ServiceStack来实现这一点。因为我不想拥有状态完整的Web服务,所以我选择使用Jwt令牌来处理用户授权。客户机验证并从服务调用中获取令牌,然后将toekn放入授权标头中,每个请求都对其进行验证

在“我的服务”中,执行呼叫的授权不仅仅是检查用户是否登录,还因请求而异,例如:

  • 检查权限A
  • 检查对象O1上的权限
  • 检查对象O2上的权限B
  • 其中一些检查可以使用请求筛选器进行,其他检查则在服务中强制执行,因为它们取决于请求中传递的数据

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

    我想到的是一个TokenAuthorizationManager,它能够从请求中提取和验证令牌。我在具有请求作用域的容器中注册此类

    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身份验证功能
  • 我的web客户端将是一个angularjs应用程序(如果我能将所有东西都粘在一起)

  • 感谢您对这些主题的介绍。

    我看不出您有任何改进,事实上,在我看来,您正确地使用了请求前过滤器

    我还使用ServiceStack实现了一个身份验证提供程序,它读取请求前过滤器上的输入数据,与您的操作方式相同。我们的客户机也是使用Angular开发的,我们有一个用于http客户机的拦截器,用于设置授权头(更具体地说,我们使用Restangular)

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

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