servicestack Servicestack-身份验证问题,servicestack,servicestack" /> servicestack Servicestack-身份验证问题,servicestack,servicestack" />

servicestack Servicestack-身份验证问题

servicestack Servicestack-身份验证问题,servicestack,servicestack,我目前正在与我的自定义CredentialAuthProvider实现进行一些斗争。首先,重要的是,我正在编写一个WPF客户机作为API的参考 浏览器存储cookie,您可以配置如何处理cookie,例如在浏览器关闭时删除cookie。在windows桌面上,您有Environment.SpecialFolder.Cookies,windows在其中存储Cookie。但我在ServiceStack中找不到任何东西。那么,它不在Windows桌面应用程序上存储任何内容吗?我看到有一个client.

我目前正在与我的自定义
CredentialAuthProvider
实现进行一些斗争。首先,重要的是,我正在编写一个WPF客户机作为API的参考

  • 浏览器存储cookie,您可以配置如何处理cookie,例如在浏览器关闭时删除cookie。在windows桌面上,您有Environment.SpecialFolder.Cookies,windows在其中存储Cookie。但我在ServiceStack中找不到任何东西。那么,它不在Windows桌面应用程序上存储任何内容吗?我看到有一个
    client.CookieContainer
    ,在那里我在登录后找到了三个cookie
  • 我是否可以在身份验证过程中向此cookie添加属性?如果是,怎么做?目前,我使用
    AuthenticationResponse.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;