servicestack Servicestack-身份验证问题
我目前正在与我的自定义
servicestack Servicestack-身份验证问题,
servicestack,
servicestack,我目前正在与我的自定义CredentialAuthProvider实现进行一些斗争。首先,重要的是,我正在编写一个WPF客户机作为API的参考 浏览器存储cookie,您可以配置如何处理cookie,例如在浏览器关闭时删除cookie。在windows桌面上,您有Environment.SpecialFolder.Cookies,windows在其中存储Cookie。但我在ServiceStack中找不到任何东西。那么,它不在Windows桌面应用程序上存储任何内容吗?我看到有一个client.
CredentialAuthProvider
实现进行一些斗争。首先,重要的是,我正在编写一个WPF客户机作为API的参考
client.CookieContainer
,在那里我在登录后找到了三个cookieAuthenticationResponse.Meta
字典传输其他信息:
public override object Authenticate(IServiceBase authService, IAuthSession session, Authenticate request)
{
var authResponse = (AuthenticateResponse)base.Authenticate(authService, session, request);
authResponse.Meta = new Dictionary<string, string>();
authResponse.Meta.Add("Test", "TestValue");
return authResponse;
}
您可以像浏览器一样填充ServiceStack服务客户端Cookies,但它只保留永久会话ID,您需要使用
RememberMe=true
进行身份验证,例如:
var response = client.Post(new Authenticate {
provider = "credentials",
UserName = ...,
Password = ...,
RememberMe = true,
});
它将根据HttpWebRequest CookieContainer中的ss pid
永久Cookie保存经过身份验证的用户会话,并在每次后续请求时发送
您可以在authenticated
中通过authService
设置自己的永久cookie,方法是:
var httpRes = authService.Request.Response;
httpRes.SetPermanentCookie(cookieName, cookieValue);
派生的CredentialAuthProvider类的实例是否线程安全
否使用同一AuthProvider singleton实例对每个请求进行身份验证,因此您无法在实例本身上维护任何存储的变量,需要删除:
//private AppUser user = null; //Instance variables are not ThreadSafe
如果您想通过请求管道传递项目并访问它们,您可以将它们存储在IRequest.items
字典中,例如:
authService.Request.Items["AppUser"] = user;
authService.Request.Items["AppUser"] = user;