我已经CredentialsAuthProvider
为我的身份验证实现了一个自定义,并将其与内存会话存储中的默认值一起使用。
现在我尝试将会话存储更改为 Redis 并将其添加到我的Configure()
方法中AppHost
:
container.Register<IRedisClientsManager>(c =>
new PooledRedisClientManager("localhost:6379"));
container.Register<ICacheClient>(c => (ICacheClient)c
.Resolve<IRedisClientsManager>()
.GetCacheClient()).ReusedWithin(Funq.ReuseScope.None);
现在,当我进行身份验证时,我可以看到urn:iauthsession:...
我的 Redis 服务器中添加了一个密钥。[Authenticate]
但是所有具有该属性的路由都会401 Unauthorized
出错。
是这样实现的CustomCredentialsAuthProvider
:
public class CustomCredentialsAuthProvider : CredentialsAuthProvider
{
public override bool TryAuthenticate(IServiceBase authService, string userName, string password)
{
if (userName != string.Empty && password != string.Empty)
{
// Database call ...
var session = (CustomSession)authService.GetSession();
session.ClientId = login.ClientId;
// Fill session...
authService.SaveSession(session, SessionExpiry);
return true;
}
return false;
}
}
服务栈版本:3.9.71
编辑 :
我试图覆盖该CredentialsAuthProvider
IsAuthorized
方法但没有成功。
但是我从 继承了我的会话对象AuthUserSession
,它也有一个IsAuthorized
方法。当我从此方法返回 true 时,Redis 会话确实与Authenticate
属性一起工作。
public class CustomSession : AuthUserSession
{
public int ClientId { get; set; }
...
public override bool IsAuthorized(string provider)
{
return true;
}
}