我编写了一个 CustomApiKeyAuthProvider,允许使用在 URL 查询字符串中传递的 API key ,如下所示:
它是我们系统拥有的四个身份验证提供程序之一。
我们的 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 是否只是通过列表工作?
谢谢!
最佳答案
首先,您需要使用[Authenticate]
属性保护您的服务。
这要求只有经过身份验证的用户才能访问该服务。可以使用任何已注册的身份验证提供商对用户进行身份验证,即它不是特定于请求的。
您可以从用户 session 中的 AuthProvider
属性中找出用户使用哪个身份验证提供程序进行身份验证,例如:
var authProviderUsed = base.Request.GetSession().AuthProvider;
您还可以通过指定AuthProvider Name来断言用户需要使用特定的身份验证提供者进行身份验证。在:
[Authenticate(Provider="credentials")]
关于authentication - 如何确定使用哪个 ServiceStack AuthProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47071061/