持久化RefreshToken OnAuthenticated - ServiceStack

时间:2018-06-05 21:34:59

标签: servicestack

此问题与此问题有关:" Revoking Bearer Token and Refresh Token - ServiceStack"

当用户使用他们的用户名和密码成功登录时,我希望将用户的RefreshToken存储在数据库中。我的想法是,我可以使用RefreshToken作为用户会话的唯一标识符,如果用户已撤销其令牌,并且可以根据GetAccessToken请求中传递的RefreshToken短路GetAccessToken请求并检查RefreshToken我坚持了。

我想在我的overAuthenticated实现中坚持我的auth API中的RefreshToken:

 IHttpResult OnAuthenticated(IServiceBase authService,
            IAuthSession session, IAuthTokens tokens,
            Dictionary<string, string> authInfo)

这似乎是合适的地方。在初始凭证auth请求中,IAuthTokens tokens为null,authService.Request.GetBearerToken返回null。

有没有什么可以访问客户端将接收并保持它的RefreshToken?

1 个答案:

答案 0 :(得分:2)

Session Cookies是会话的唯一标识符,是key used to save the session against

但JWT的观点是没有服务器会话状态,因为它封装在JWT承载令牌中。所以我不理解这种维护服务器状态的方法,使使用JWT的主要好处无效。

服务器可以通过注册Global Response Filter并检查AuthenticateResponse DTO或注册Typed Response Filter来访问返回的RefreshToken,该enter image description here调用已注册DTO的Typed过滤器,例如:

public override void Configure(Container container)
{
    RegisterTypedResponseFilter<AuthenticateResponse>((req, res, dto) =>
    {
        var jwt = dto.BearerToken;
        var refreshToken = dto.RefreshToken;
    });
}