req.GetApiKey()不在DB ServiceStack ApiKeyAuthProvider中执行任何查询

时间:2017-02-20 12:59:49

标签: servicestack

这是我的身份验证配置

Plugins.Add(new AuthFeature(() => new AuthUserSession(),

                    new IAuthProvider[]
                    {
                        new ApiKeyAuthProvider(AppSettings) {RequireSecureConnection = false }
                    })
                {
                    IncludeRegistrationService = true,

                });

全局过滤器

 GlobalRequestFilters.Add((req, res, requestDto) =>
                {
                    LastApiKey = req.GetApiKey();

                });

我在DB中生成了Api密钥并尝试通过postman或JsonServiceClient传递密钥,其中基本身份验证在Http请求的用户名中具有API密钥。我也尝试在Http请求中传递bearer token,但是无法从req.GetApiKey()获取api密钥。当我通过SQL分析器看到它没有显示任何执行的查询。但是我能够解析IManageApiKeys并能够执行它的方法。我的服务中是否需要任何属性或AppHost中的任何其他配置?

1 个答案:

答案 0 :(得分:2)

ServiceStack的API Key Auth Provider通过在successful API Key Authentication requests的请求上设置经过身份验证的用户会话来工作。设置经过身份验证的用户会话时,API Key that was used to authenticate存储在IRequest.Items字典中,这是IRequest.GetApiKey() Extension method返回的内容。

所以IRequest.GetApiKey()没有进行任何数据库调用,这在初始设置认证用户会话时已经完成。

验证是在需要时执行的,例如当您的服务使用以下任何身份验证属性进行注释时:

  • [Authenticate]
  • [RequiredRole] / [RequiresAnyRole]
  • [RequiredPermission] / [RequiresAnyPermission]