gpt4 book ai didi

c# - JWT 访问 token 与刷新 token (创建)

转载 作者:行者123 更新时间:2023-11-30 14:49:05 26 4
gpt4 key购买 nike

我正在创建一个 Asp.net Core REST 服务。目前正在通过 JWT 不记名 token 进行身份验证。

现在,我的代码如下所示:

        DateTimeOffset dtNow = DateTime.Now;

Claim[] claims = new Claim[]
{
new Claim(JwtRegisteredClaimNames.Sub, strUsername),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(JwtRegisteredClaimNames.Iat, dtNow.ToUnixTimeSeconds().ToString(), ClaimValueTypes.Integer64)
};

JwtSecurityToken jwtAccess = new JwtSecurityToken(_options.Issuer, _options.Audience, claims, dtNow.DateTime, dtNow.DateTime.Add(_options.AccessTokenExpiration),
_options.SigningCredentials);

var response = new
{
access_token = new JwtSecurityTokenHandler().WriteToken(jwtAccess),
token_type = "Bearer",
expires_in = (int)_options.AccessTokenExpiration.TotalSeconds,
refresh_token = ""
};

问题:

  1. 现在,我的访问 token 可以使用 1 小时,并且可以刷新60 天的代币。这些值合理吗?
  2. 没怎么看关于如何创建 refresh_token 的文档...这是创建的完全像访问 token ,只是超时时间不同?
  3. 我的理解是我应该将刷新 token 存储在数据库中,如果用户发送刷新 token 请求,我需要验证 token 的签名并确保它在我的数据库中?
  4. 当用户请求刷新 token 时,我应该返回相同的 refresh_token,无论其是否过期,让用户担心获得新 token ?
  5. 一个用户一次应该只有一个刷新 token ,对吗?如果他们再执行一次 password_grant,我只是覆盖刷新 token ,就好像他们正在获得一个全新的 token 一样?
  6. 最后一个问题是,我看到人们在进行 JWT 身份验证,这就是我这样做的原因,哈哈,但这与通过 HTTPS 发送用户名/密码有什么不同?我知道 JTW 在有效负载中携带状态/角色/等,这样可以节省数据库调用,但是由于身份验证 token 的生命周期很短,因此他们必须每 5 分钟获取一个新 token ,所以这一切看起来有点像就像洗个澡,除非我遗漏了什么?

最佳答案

  1. 这完全取决于您的应用需求,但这些数字听起来确实很合理。

  2. 它们的创建方式不同。访问 token 通常是包含 JWT 的 token 。刷新 token 是一个引用 token ,必须保存在提供程序上,并在传入新访问 token 时进行备份。

  3. 刷新 token 没有要验证的签名。基本上,您将传递诸如客户端 ID 和密码之类的信息以及刷新 token ,这将允许您获得新的访问 token 。就像长期保存的用户名和密码,必要时可以将其列入黑名单。

  4. 不,您不能在他们每次请求新访问 token 时更新刷新 token ,这将为您提供“滑动”刷新 token 。

  5. 他们可以为每个应用程序使用不同的 token ,但对于每个应用程序,在他们进行新登录时覆盖他们以前的刷新 token 是可以的。

  6. 是的,用户必须每 30 分钟获得一个新的访问 token ,但当您的角色提供者与您的应用程序不同时,这也会有所帮助。这为 API 提供了一种无需调用授权服务器即可查看角色的方法。当您将信息保存在 token 中并且只需要每 30 分钟重新获取该信息而不是为每个 API 调用或回发向单独的服务器发出额外的 HTTP 请求时,请求的数量将大大减少。

希望其中一些内容对您有所帮助。我说的是次要经验,但有很好的资源解释来自 Auth0 的这些东西或者基本上来自 IdentityServer3(现在是 4)的人的任何东西

关于c# - JWT 访问 token 与刷新 token (创建),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39476329/

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