2

我有一个使用 ServiceStack 的 Web 服务、Android 应用程序等 API。我目前使用在客户端看起来像这样的用户名/密码组合进行身份验证:

var authResponse = authService.Authenticate(new Auth {
provider = "credentials",
UserName = user.user_id,
Password = user.password,
RememberMe = true
});

我想做类似的事情:

var authResponse = authService.Authenticate(new Auth {
provider = "credentials",
UserName = user.user_id,
Password = user.password,
ClientCode = user.clientCode <=====
RememberMe = true
});

此时我需要发送一个客户端代码以及用户名/密码。另一方面,我将使用该客户端代码来确定我应该针对哪个数据库进行身份验证。

由于此时似乎无法扩展 Auth 类,我想知道是否有更简单的起点。

谢谢

4

2 回答 2

1

您可以尝试为客户端代码传递标头值。您可以搜索传递 API 密钥的示例。

于 2013-10-17T00:50:48.440 回答
1

我建议为此使用不同的身份验证提供程序实现。以下是更多详细信息:

  • 为每个客户端代码创建一个单独的类,例如:
public class Code1AuthProvider : CredentialsAuthProvider
    {

        public Code1AuthProvider ()
        {
            this.Provider = "Code1";

        }
        public override bool TryAuthenticate(IServiceBase authService, string userName, string password)
        {
        }
        public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary authInfo)
        {
        }
}

同样的方式为每个代码创建单独的类。

  • 现在您需要在项目的 AppHost 文件中注册所有提供程序。

  • 现在您可以/Auth/Code1作为您的身份验证访问。由于您使用的是单独的数据库,因此以这种方式管理代码会更容易。

  • [Authenticate("Code1")]您希望为特定类型的用户验证服务的地方使用。

  • 在客户端,您可以使用适当/Auth/ClientCode的 url 进行身份验证。

于 2013-10-17T12:39:40.293 回答