我编写了一个CustomApiKeyAuthProvider,允许使用在URL查询字符串中传递的API密钥:
它是我们系统拥有的四个身份验证提供程序之一。
我们的AppHost配置现在看起来像这样:
_appHost.Plugins.Add(new AuthFeature(
() => new AuthUserSession(),
new IAuthProvider[] {
new CustomApiKeyAuthProvider(),
new CredentialsAuthProvider(),
new BasicAuthProvider(),
new JwtAuthProviderReader(_appHost.AppSettings)
{
AuthKey = Encoding.UTF8.GetBytes(OurEnvironment.TokenSecret),
}
}));
我们经过身份验证的服务电话只标有:
[Authenticate]
因此,可以使用任何提供商对其进行身份验证。
我遇到的问题是,当我通过发出类似上面的请求来测试它时,它不会尝试使用新的提供程序。我刚刚获得401 Unauthorized。
确定使用哪个提供程序的请求是什么,或者ServiceStack是否只是通过列表工作?
谢谢!
答案 0 :(得分:2)
首先,您需要使用[Authenticate]
属性保护您的服务。
这要求只有经过身份验证的用户才能访问该服务。用户可以使用任何已注册的Auth Providers 进行身份验证,即它不是特定于请求的。
您可以从用户会话中的AuthProvider
属性中找出用户用于进行身份验证的Auth Provider,例如:
var authProviderUsed = base.Request.GetSession().AuthProvider;
您还可以通过在以下位置指定AuthProvider Name来声明用户需要使用特定的Auth Provider进行身份验证:
[Authenticate(Provider="credentials")]