servicestack,Rest,Silverlight 5.0,servicestack" /> servicestack,Rest,Silverlight 5.0,servicestack" />

Rest 如何从服务堆栈AuthService中使用cookies/会话在客户端加载经过身份验证的用户?

Rest 如何从服务堆栈AuthService中使用cookies/会话在客户端加载经过身份验证的用户?,rest,silverlight-5.0,servicestack,Rest,Silverlight 5.0,servicestack,我正在使用Silverlight 5使用JsonServiceClient的ServiceStack REST服务,现在还可以 此时,我可以在Asp.Net中的路径/api处登录/注销ServiceStack 但在我登录后,如果用户刷新了Silverlight所在的浏览器当前页面,Silverlight应用程序将重新加载,会话/cookie信息将消失,从而迫使用户再次登录/输入密码。这是一种不受欢迎的行为 在服务器端,我使用默认的CredentialsProvider: var appSetti

我正在使用Silverlight 5使用JsonServiceClient的ServiceStack REST服务,现在还可以

此时,我可以在Asp.Net中的路径/api处登录/注销ServiceStack

但在我登录后,如果用户刷新了Silverlight所在的浏览器当前页面,Silverlight应用程序将重新加载,会话/cookie信息将消失,从而迫使用户再次登录/输入密码。这是一种不受欢迎的行为

在服务器端,我使用默认的CredentialsProvider:

var appSettings = new AppSettings();
var credentialsProvuder = new CredentialsAuthProvider(appSettings);

//Default route: /auth/{provider}
Plugins.Add(new AuthFeature(() => new CustomUserSession(),
new IAuthProvider[] { credentialsProvuder }));
在客户端上,我将RememberMe设置为true:

    public static void TryLogin(string userName, string password, bool rememberMe, Action<AuthResponse, Exception> callBack)
    {
        AuthDto.UserName = userName;
        AuthDto.Password = password;
        AuthDto.RememberMe = rememberMe;
        Client.SendAsync<AuthResponse>(AuthDto, r => TryLoginResponse(callBack, r, null),
                         (r, e) => TryLoginResponse(callBack, r, e));
    }
如上面代码所示,AsyncServiceClient在每个请求之前检查CookieContainer,如果为null,则将Cookie从Silverlight的WebClient设置为浏览器

好的,现在我们对cookies没问题了,因为我确信cookies是从客户端发送到浏览器的

那么,如何在不重新发送用户名和密码的情况下,基于现有的X-UAId重新验证用户

如果在客户端中,我向AuthService发送一个空GET,服务验证cookie、会话,并自动向JsonServiceClient返回一个响应,指示用户已通过身份验证


我想要的类似于WCF Ria服务“WebContext.Current.Authentication.LoadUser()”,它向服务器发出请求,如果服务器上的用户经过身份验证,则返回当前用户。

这可能有点晚,但我遇到了相同的问题,问题出在AsyncServiceClient中。当身份验证失败时,客户端发送另一个添加了BasicAuthentication头的请求。但是,当在此行中创建第二个请求时

然后CookieStore没有设置,因此当服务器响应时cookies不会被存储。在上述a行之后,将其放入:

if (StoreCookies)
{
    requestState.WebRequest.CookieContainer = CookieContainer;
}

另一个问题是在DELETE/auth/logout之后,X-UAId cookie未设置为删除。也许我必须继承CredentialAuthProvider才能修复丢失的内容。你找到答案了吗?
if (StoreCookies)
{
    requestState.WebRequest.CookieContainer = CookieContainer;
}