【问题标题】:Persisting RefreshToken OnAuthenticated - ServiceStack持久化 RefreshToken OnAuthenticated - ServiceStack
【发布时间】:2018-06-06 06:18:20
【问题描述】:

这个问题在这里与这个问题有关:“Revoking Bearer Token and Refresh Token - ServiceStack

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

我想在我重写的 OnAuthenticated 实现中将 RefreshToken 保留在我的身份验证 API 中:

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

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

有什么东西可以访问客户端将收到并持久化的 RefreshToken 吗?

【问题讨论】:

    标签: servicestack


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 是的,我对ServiceStack Session没有深入了解,不需要使用RefreshToken,直接使用Session cookie,谢谢@mythz
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    相关资源
    最近更新 更多