Authentication 如何在服务堆栈客户端中检查用户是否经过身份验证?

Authentication 如何在服务堆栈客户端中检查用户是否经过身份验证?,authentication,servicestack-bsd,Authentication,Servicestack Bsd,我有自托管服务堆栈服务器。在客户端应用程序中,它是Windows窗体,我想在用户未经身份验证时显示登录窗体。一种方法是尝试发送请求并捕获WebServiceException,如中所示 我正在寻找客户端的@if(Request.IsAuthenticated)(示例)等价物 简短回答是无法在客户端上确定用户是否经过身份验证,因为服务器上存储了确定客户端是否经过身份验证的状态 只有当存在安全漏洞时,才对用户进行身份验证。此SessionId通常在HTTP客户端Cookies中发送,该Cookies

我有自托管服务堆栈服务器。在客户端应用程序中,它是Windows窗体,我想在用户未经身份验证时显示登录窗体。一种方法是尝试发送请求并捕获
WebServiceException
,如中所示


我正在寻找客户端的
@if(Request.IsAuthenticated)
(示例)等价物

简短回答是无法在客户端上确定用户是否经过身份验证,因为服务器上存储了确定客户端是否经过身份验证的状态

只有当存在安全漏洞时,才对用户进行身份验证。此SessionId通常在HTTP客户端Cookies中发送,该Cookies在成功的身份验证尝试后填充,例如:

var client = JsonServiceClient(BaseUrl);
var authResponse = client.Send(new Authenticate
{
    provider = CredentialsAuthProvider.Name,
    UserName = "user",
    Password = "p@55word",
    RememberMe = true,
});
现在,您可以使用同一个客户端(已填充其cookie)向仅授权服务发出经过身份验证的请求。尽管需要注意,如果服务器出于任何原因清除了用户会话,客户端将不再进行身份验证,并将抛出401个未经授权的HTTP异常,此时他们将不得不重新进行身份验证

显示了使用ajax在客户端上进行身份验证和检索会话的示例,以通过调用
/auth
确定是否对用户进行了身份验证,例如:

$.getJSON("/api/auth", function (r) {
    var html = "<h4 class='success'>Authenticated!</h4>"
        + "<table>"
        + $.map(r, function(k, v) {
            return "<tr><th>" + v + "<th>"
                + "<td>" 
                + (typeof k == 'string' ? k : JSON.stringify(k)) 
                + "</td></tr>";
        }).join('')
        + "</table>";
    $("#status").html(html);
}).error(function () {
    $("#status").html("<h4 class='error'>Not Authenticated</h4>");
try
{
    var response = client.Get(new Authenticate());
    //Authenticated
} 
catch (WebServiceException)
{
    //Not Authenticated
}