authentication - 如何确定使用哪个 ServiceStack AuthProvider

标签 authentication servicestack api-key

我编写了一个 CustomApiKeyAuthProvider,允许使用在 URL 查询字符串中传递的 API key ,如下所示:

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

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

您可以从用户 session 中的 AuthProvider 属性中找出用户使用哪个身份验证提供程序进行身份验证,例如:

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

您还可以通过指定AuthProvider Name来断言用户需要使用特定的身份验证提供者进行身份验证。在:

[Authenticate(Provider="credentials")]

关于authentication - 如何确定使用哪个 ServiceStack AuthProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47071061/

相关文章:

Laravel - 管理员和前端的身份验证问题

c# - 如何解决 Funq IoC 中的循环依赖?

node.js - 如何在谷歌翻译 Node.js 代码中设置 API KEY

node.js - 跨 node.js 和 nginx 的身份验证

java - 登录系统.txt文件读取问题

javascript - 服务堆栈是我的数据中的双重转义引号

c# - PUT 时记录更改的最佳方法

python - 在 Python 中保护 API key

c# - 在 .NET Core 中使用 JWT token 或 API key 的授权机制

authentication - 使用 XHR 进行基本身份验证