gpt4 book ai didi

servicestack - Bearer Token 和 Refresh Token 有什么区别?

转载 作者:行者123 更新时间:2023-12-04 03:07:39 30 4
gpt4 key购买 nike

在 ServiceStack 中,我正在使用 JwtAuthProvider,我从中获得了 Bearer Token 和 Refresh token 那么我该如何验证 token 并授权 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'值有什么用?用户已经获得授权和身份验证,所以我不明白为什么这里需要 token ?

谁能建议我如何利用该 token ?JWT 配置:

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()
}));

最佳答案

请参阅 purpose of JWT Refresh Tokens 上的这篇文章.

总而言之,BearerToken 是实际的 JWT 以及用于通过 JWT 进行身份验证的内容。它包含用户 session 的无状态快照,通常是一个短期 token ,在它过期后需要联系 Auth 服务器以获取新的 JWT token 。

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

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

每个 token 的生命周期都可以使用 ExpireTokensInExpireRefreshTokensIn JwtAuthProvider 属性进行配置。

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

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 token ,您只需要填充 RefreshToken:

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

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

关于servicestack - Bearer Token 和 Refresh Token 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47668499/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com