我正在尝试从ServerEventsClient访问我的自定义AuthProvider(继承自BasicAuthProvider)。 提供商代码非常简单ATM
public class RoomsAuthProvider : BasicAuthProvider
{
public RoomsAuthProvider(AppSettings appSettings) : base(appSettings)
{
}
public RoomsAuthProvider()
{
}
public override bool TryAuthenticate(IServiceBase authService,
string userName, string password)
{
return true;
}
public override IHttpResult OnAuthenticated(IServiceBase authService,
IAuthSession session, IAuthTokens tokens,
Dictionary<string, string> authInfo)
{
session.FirstName = "some_firstname_from_db";
return base.OnAuthenticated(authService, session, tokens, authInfo);
}
}
我像往常一样注册:
public override void Configure(Funq.Container container)
{
container.Register<ICacheClient>(new MemoryCacheClient());
Plugins.Add(new AuthFeature(() => new AuthUserSession(),
new IAuthProvider[]
{
new RoomsAuthProvider()
}));
Plugins.Add(new ServerEventsFeature());
}
我的客户是:
var client = new ServerEventsClient("http://localhost:1337/", "home")
尝试进行身份验证:
var authResponse = client.Authenticate(new Authenticate
{
provider = "RoomsAuthProvider",
UserName = "test@gmail.com",
Password = "p@55w0rd",
RememberMe = true,
});
我总是得到NotFound错误,并且rror声明没有为此AuthProvider设置配置。在提供程序中设置名称和域名没有帮助。是否有这种类型的客户端的另一个身份验证流程或我错过了什么?欢迎任何想法
答案 0 :(得分:2)
当你继承BasicAuthProvider时,你也会继承它provider name除非你覆盖它,否则是default is "basic"(即它不是继承的名称)类)。
但是BasicAuthProvider
实现了HTTP Basic Auth,因此您打算通过HTTP基本身份验证而不是通过Web服务调用来调用它。
如果您尝试通过Web服务调用进行身份验证,则应继承CredentialsAuthProvider,而不是通过用户名/密码进行身份验证的身份验证方法,就像您在示例中所做的那样。 CredentialsAuthProvider
的提供商名称为credentials,因此您的客户来电将是:
var authResponse = client.Authenticate(new Authenticate
{
provider = "credentials",
UserName = "test@gmail.com",
Password = "p@55w0rd",
RememberMe = true,
});