【问题标题】:What is the difference between Bearer Token and Refresh Token?Bearer Token 和 Refresh Token 有什么区别?
【发布时间】:2017-12-06 06:52:06
【问题描述】:

在 ServiceStack 中,我使用的是 JwtAuthProvider,我在其中获得了 Bearer Token 和 Refresh 令牌,那么如何验证令牌并授权 Web api 服务? 代码:

var client = new JsvServiceClient(ListeningOn) { UserName = "tuser", Password = "password" };
            client.Send<AssignRolesResponse>(new AssignRoles
            {
                UserName = "tuser",
                Roles = new ArrayOfString("TestRole"),
                Permissions = new ArrayOfString("GetStatus")
            });

            var jwtToken = client.Send(new Authenticate()).BearerToken;

这里,'jwtToken'值有什么用?用户已经获得授权和身份验证,所以我不明白为什么这里需要令牌?

谁能建议我如何利用该令牌? 智威汤逊配置:

this.Plugins.Add(new AuthFeature(() => new AuthUserSession(),
                                new IAuthProvider[]
                                    {
                                        new JwtAuthProvider(AppSettings) {
                                        RequireSecureConnection = false,
                                        AuthKey = AesUtils.CreateKey(),
                                        //CreatePayloadFilter = (payload,session) =>
                                       // payload["CreatedAt"] = session.CreatedAt.ToUnixTime().ToString(),
                                        CreatePayloadFilter = (jwtPayload, session) =>
                jwtPayload["exp"] = DateTime.UtcNow.AddSeconds(-1).ToUnixTime().ToString()
        },
                                new CredentialsAuthProvider(AppSettings),
                                new BasicAuthProvider()
                    }));

【问题讨论】:

    标签: servicestack jwt


    【解决方案1】:

    请在purpose of JWT Refresh Tokens上查看这篇文章。

    总之,BearerToken 是实际的 JWT 以及用于通过 JWT 进行身份验证的内容。它包含用户会话的无状态快照,通常是短暂的令牌,过期后需要联系身份验证服务器以获取新的 JWT 令牌。

    RefreshToken 是一个longer-lived token,可用于透明地请求新的 JWT 令牌(即不强制用户手动重新验证),并将填充用户会话的最新快照。

    JWT BearerToken 的生命周期越短,存储在 JWT 中的无状态会话信息越不陈旧,但需要使用 RefreshToken 来获取更新的 BearerToken 的频率越高。只有在请求新的 BearerToken 之后,才会显示角色和权限等会话信息,或者它们是否被锁定。

    每个 Token 的生命周期可通过 ExpireTokensIn 和 ExpireRefreshTokensIn JwtAuthProvider 属性进行配置。

    ServiceStack 客户端内置对 JWT 和刷新令牌的支持

    ServiceStack 的服务客户端会自动处理transparently fetching new JWT Tokens using RefreshTokens。在初始化服务客户端时,您通常会同时填充 BearerToken 和 RefreshToken,例如:

    var authResponse = authClient.Send(new Authenticate());
    
    var client = new JsonServiceClient(baseUrl) {
        BearerToken = authResponse.BearerToken,
        RefreshToken = authResponse.RefreshToken,
    };
    

    发出请求需要BearerToken,但由于服务客户端会使用配置的 RefreshToken 自动获取新的 JWT 令牌,因此您只需填充 RefreshToken:

    var client = new JsonServiceClient(baseUrl) {
        RefreshToken = authResponse.RefreshToken,
    };
    

    因为 ServiceStack 会在首次使用时自动获取新的 JWT 令牌,但您可以通过填充两者来节省往返时间。

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 2021-04-28
      • 2017-07-13
      • 2017-11-20
      • 1970-01-01
      • 2020-06-11
      • 2018-10-19
      • 1970-01-01
      • 2012-09-19
      相关资源
      最近更新 更多