【问题标题】: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 的生命周期可通过 ExpireTokensInExpireRefreshTokensIn 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
      相关资源
      最近更新 更多