如何确定使用哪个 ServiceStack AuthProvider
How to determine which ServiceStack AuthProvider gets used
我编写了一个 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 只是通过列表工作?
谢谢!
首先,您需要使用 [Authenticate]
属性保护您的服务。
这要求只有经过身份验证的用户才能访问该服务。可以使用 任何已注册的 Auth Provider 对用户进行身份验证,即它不特定于请求。
您可以从用户会话中的 AuthProvider
属性 中找出用户使用哪个 Auth Provider 进行身份验证,例如:
var authProviderUsed = base.Request.GetSession().AuthProvider;
您还可以通过在
中指定 AuthProvider Name 来断言用户需要通过特定的 Auth Provider 进行身份验证
[Authenticate(Provider="credentials")]
我编写了一个 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 只是通过列表工作?
谢谢!
首先,您需要使用 [Authenticate]
属性保护您的服务。
这要求只有经过身份验证的用户才能访问该服务。可以使用 任何已注册的 Auth Provider 对用户进行身份验证,即它不特定于请求。
您可以从用户会话中的 AuthProvider
属性 中找出用户使用哪个 Auth Provider 进行身份验证,例如:
var authProviderUsed = base.Request.GetSession().AuthProvider;
您还可以通过在
中指定 AuthProvider Name 来断言用户需要通过特定的 Auth Provider 进行身份验证[Authenticate(Provider="credentials")]