servicestack,Authentication,servicestack" /> servicestack,Authentication,servicestack" />

Authentication 让.NET客户端识别身份验证会话cookie

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

我正在使用“RememberMe=true”,并希望我的服务客户端重新使用打开的会话(如果可用)。我从下面的链接中获得了大部分代码——这段代码可以工作,但每次认证都会失败并重新认证。我是否一定要以某种方式发送ss pid cookie

还要注意:这是一个WinForms客户端,正在访问我的servicestack服务

我的代码

    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());