Authentication 让.NET客户端识别身份验证会话cookie
我正在使用“RememberMe=true”,并希望我的服务客户端重新使用打开的会话(如果可用)。我从下面的链接中获得了大部分代码——这段代码可以工作,但每次认证都会失败并重新认证。我是否一定要以某种方式发送ss pid cookie 还要注意:这是一个WinForms客户端,正在访问我的servicestack服务 我的代码Authentication 让.NET客户端识别身份验证会话cookie,authentication,
servicestack,Authentication,
servicestack,我正在使用“RememberMe=true”,并希望我的服务客户端重新使用打开的会话(如果可用)。我从下面的链接中获得了大部分代码——这段代码可以工作,但每次认证都会失败并重新认证。我是否一定要以某种方式发送ss pid cookie 还要注意:这是一个WinForms客户端,正在访问我的servicestack服务 我的代码 Private Shared _UserName As String = "xxxxx" Private Shared _Password As Str
Private Shared _UserName As String = "xxxxx"
Private Shared _Password As String = "yyyyy"
Private Shared _clientAuthenticationRequested As New Action(Of WebRequest)(AddressOf InteractiveAuthentication)
Public Shared ReadOnly Property ServiceClient() As JsonServiceClient
Get
If _serviceClient Is Nothing Then
_serviceClient = New JsonServiceClient(ServiceContext.ServiceUrl)
_serviceClient.OnAuthenticationRequired = _clientAuthenticationRequested
_serviceClient.UserName = _UserName
_serviceClient.Password = _Password
//service requiring authentication
Dim v = _serviceClient.Get(Of Tonto.Svc.Model.AppConstants)(
New Tonto.Svc.Model.AppConstants())
End If
Return _serviceClient
End Get
End Property
Private Shared Sub InteractiveAuthentication(sourcerequest As System.Net.WebRequest)
Dim v = _serviceClient.Send(Of ServiceStack.AuthenticateResponse)(
New ServiceStack.Authenticate() With {
.UserName = _UserName,
.Password = _Password,
.RememberMe = True})
End Sub
您不能让客户机在创建现成客户机之间记住您的会话。
RememberMe
选项在这里不起作用,因为客户端没有像web浏览器那样的持久cookie存储
但是,您可以在经过身份验证后访问客户端的cookie存储,然后读取会话值cookie,并在将来的客户端实例中恢复它。本质上,您提供了持久性层
对不起,这不是VB。但我认为这个概念应该足够清楚
var主机=”http://localhost:9001";
JsonServiceClient=新的JsonServiceClient(主机);
//通过服务进行身份验证
Post(新的身份验证{UserName=“test”,Password=“Password”});
//成功验证后读取会话cookie
var cookies=client.CookieContainer.GetCookies(新Uri(主机));
var sessionCookieValue=cookies[“ss id”]。值;
//存储sessionCookieValue的值,以便以后可以恢复此会话
client=null;
因此,如果要将ss id
值保存到文件中,则可以在应用程序启动时恢复该值,然后在发出请求之前将其添加回客户端的cookie存储中
//另一个客户端实例。。。我们将重用该会话
JsonServiceClient anotherClient=新的JsonServiceClient(主机);
//恢复cookie
另一个client.CookieContainer.Add(新Cookie(“ss id”,sessionCookieValue,“/”,“localhost”);
//尝试访问安全服务
获取(newtestrequest());
您不能让客户端在创建现成客户端之间记住您的会话。RememberMe
选项在这里不起作用,因为客户端没有像web浏览器那样的持久cookie存储
但是,您可以在经过身份验证后访问客户端的cookie存储,然后读取会话值cookie,并在将来的客户端实例中恢复它。本质上,您提供了持久性层
对不起,这不是VB。但我认为这个概念应该足够清楚
var主机=”http://localhost:9001";
JsonServiceClient=新的JsonServiceClient(主机);
//通过服务进行身份验证
Post(新的身份验证{UserName=“test”,Password=“Password”});
//成功验证后读取会话cookie
var cookies=client.CookieContainer.GetCookies(新Uri(主机));
var sessionCookieValue=cookies[“ss id”]。值;
//存储sessionCookieValue的值,以便以后可以恢复此会话
client=null;
因此,如果要将ss id
值保存到文件中,则可以在应用程序启动时恢复该值,然后在发出请求之前将其添加回客户端的cookie存储中
//另一个客户端实例。。。我们将重用该会话
JsonServiceClient anotherClient=新的JsonServiceClient(主机);
//恢复cookie
另一个client.CookieContainer.Add(新Cookie(“ss id”,sessionCookieValue,“/”,“localhost”);
//尝试访问安全服务
获取(newtestrequest());