这是我的身份验证配置
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中的任何其他配置?
答案 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]