如何确定使用哪个 ServiceStack AuthProvider

How to determine which ServiceStack AuthProvider gets used

我编写了一个 CustomApiKeyAuthProvider,它允许使用在 URL 查询字符串中传递的 API 密钥,如:

GET https://example.com/resource/42?apikey=abc123etc

它是我们系统拥有的四个身份验证提供程序之一。

我们的 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] 属性保护您的服务。

这要求只有经过身份验证的用户才能访问该服务。可以使用 任何已注册的 Auth Provider 对用户进行身份验证,即它不特定于请求。

您可以从用户会话中的 AuthProvider 属性 中找出用户使用哪个 Auth Provider 进行身份验证,例如:

var authProviderUsed = base.Request.GetSession().AuthProvider;

您还可以通过在

中指定 AuthProvider Name 来断言用户需要通过特定的 Auth Provider 进行身份验证
[Authenticate(Provider="credentials")]