如何确定使用哪个ServiceStack AuthProvider

时间:2017-11-02 08:52:29

标签: authentication servicestack api-key

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

  

获取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是否只是通过列表工作?

谢谢!

1 个答案:

答案 0 :(得分:2)

首先,您需要使用[Authenticate]属性保护您的服务。

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

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

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

您还可以通过在以下位置指定AuthProvider Name来声明用户需要使用特定的Auth Provider进行身份验证:

[Authenticate(Provider="credentials")]