我尝试实现自己的自定义CredentialsAuthProvider。服务器似乎可以正常使用以下实现:
public class MyCustomCredentialsAuthProvider : CredentialsAuthProvider
{
public override bool TryAuthenticate(IServiceBase authService, string userName, string password)
{
if (userName == "testuser" && password == "1234")
{
return true;
}
else
{
return false;
}
}
public override IHttpResult OnAuthenticated(IServiceBase authService, IAuthSession session, IAuthTokens tokens,
Dictionary<string, string> authInfo)
{
session.FirstName = "Testuser Joe Doe";
authService.SaveSession(session, SessionExpiry);
return null;
}
}
当我在浏览器http://localhost:8088/auth/credentials?UserName=testuser&Password=1234上调用时,我会返回包含会话ID和测试用户Joe Doe的页面。看起来很好。
现在我尝试从我的Windows WPF客户端调用它。我已经创建了一个Login Page和一个LoginViewModel类,因为我实现了MVVM模式。但我不明白,我真正需要在Authenticate类中设置provider属性。
在我的WPF课程中,我有以下内容:
public partial class App : Application
{
public JsonServiceClient ServiceClient { get; private set; }
public App()
{
this.InitializeComponent();
}
// ....
}
然后在我的LoginViewModel中我有一个Login()方法,这是一个登录按钮的RelayCommand实现,这样(表单中还包含一个字段,您必须输入应用程序服务器的名称,因为有多个这就是我在处理程序中编写baseUri的原因:
private void Login()
{
var baseUri = $"http://{AppServer}:8088";
((App)Application.Current).InitServiceClient(baseUri);
var client = ((App) Application.Current).ServiceClient;
//var response = client.Send<AuthResponse>(new Auth { UserName = "Test", Password = "TestPassword" });
var authResponse = client.Post(new Authenticate
{
provider = CredentialsAuthProvider.Name, // <-- WHAT SHOULD THIS BE???
UserName = "testuser",
Password = "1234",
RememberMe = true,
});
// ....
}
编译器不知道 CredentialsAuthProvider
。我需要通过什么以及我需要哪些装配?到目前为止,我有:
我在这里错过了什么,做错了什么?
答案 0 :(得分:2)
CredentialsAuthProvider.Name只提供对"credentials"字符串文字的类型访问权限,您可以在其中使用,例如:
var authResponse = client.Post(new Authenticate
{
provider = "credentials",
UserName = "testuser",
Password = "1234",
RememberMe = true,
});
您可以在身份验证文档中找到Auth provider literals的列表。