我有一个使用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类,我想知道是否有更简单的起点。
由于
答案 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
网址进行身份验证。