在ServiceStack中与Auth DTO一起发送其他数据

时间:2013-10-16 18:40:44

标签: asp.net-mvc authentication mono servicestack

我有一个使用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类,我想知道是否有更简单的起点。

由于

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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网址进行身份验证。