我正在构建一个移动的和一个网络应用程序。这两个应用程序都将与一个节点服务器通信。我使用JWT进行身份验证。
目前,我有以下代码可以生成访问令牌:
const token = jwt.sign({ user: body }, "top_secret");
我对访问和刷新令牌有一些疑问:
1.如何创建刷新令牌?
1.刷新令牌看起来像什么?
1.我可以创建一个刷新令牌-类似于我创建访问令牌的方式吗?
1.刷新令牌是否仅用于生成新的访问令牌?
1.刷新令牌能否用作访问令牌?
1.如何使访问令牌无效
1.如何使刷新令牌失效?我看到的示例使用数据库来存储刷新令牌。当您想要使访问令牌失效时,刷新令牌会被删除。如果刷新令牌将存储在用户模型上的数据库中以供访问,对吗?在这种情况下,似乎应该对它进行加密
1.当用户登录到我的应用程序时,我是否同时发送访问令牌和刷新令牌?我在某处(记不起来了)读到发送访问令牌和刷新令牌不是好做法。
1.如果同时发送访问令牌和刷新令牌是一种不好的做法,那么何时向客户端发送刷新令牌呢?客户端是否应该有一个端点来请求访问令牌?
1.访问令牌和刷新令牌的有效期是多长时间?
1条答案
按热度按时间pjngdqdw1#
请注意,在典型的OAuth2方案中,颁发令牌的服务器(授权服务器)和使用访问令牌的API服务器(资源服务器)是不同的。Oauth2角色。
要回答您的问题:
1.如何创建刷新令牌?
在服务器上生成一个具有足够熵的字符串,并将其用作授权服务器中数据库记录的主键。
1.刷新令牌看起来像什么?
参见第1.5节,
1.我可以创建一个刷新令牌-类似于我创建访问令牌的方式吗?
可以,但是刷新令牌通常不是结构化令牌(如JWT),因为它们由发布它们的同一个服务器使用。
1.刷新令牌是否仅用于生成新的访问令牌?
是的
1.刷新令牌能否用作访问令牌?
没有
1.如何使访问令牌无效
除非你使用的是introspection tokens,否则没有一个好的方法可以使它们失效,只要缩短它们的生存期就行了。
1.如何使刷新令牌失效?我看到的示例使用数据库来存储刷新令牌。当您想要使访问令牌失效时,刷新令牌会被删除。如果刷新令牌将存储在用户模型上的数据库中以供访问,对吗?在这种情况下,似乎应该对它进行加密
从授权服务器存储中删除。如果在服务器上找不到刷新令牌,则不能使用它来刷新访问令牌。刷新令牌通常只是数据库记录的主键,该记录保存有关刷新令牌的客户端、用户和过期日期的数据。虽然您不希望泄漏刷新令牌,但通常要求使用它们的客户端提供客户端凭据才能使用它。
1.当用户登录到我的应用程序时,我是否同时发送访问令牌和刷新令牌?我在某处(记不起来了)读到发送访问令牌和刷新令牌不是好做法。
用户在授权服务器上登录。它向客户端返回访问令牌和刷新令牌(如果您的客户端是机密的)。客户端仅使用访问令牌来访问资源服务器上的数据。
1.如果同时发送访问令牌和刷新令牌是一种不好的做法,那么何时向客户端发送刷新令牌呢?客户端是否应该有一个端点来请求访问令牌?
客户端在调用授权服务器时使用刷新令牌来获取新的访问令牌,因此客户端只向资源服务器发送访问令牌,也只向授权服务器发送刷新令牌。
1.什么是访问令牌和刷新令牌的有效期?
这取决于您的威胁模型。当您的刷新令牌过期时,用户将被强制重新进行身份验证。有些产品使用永不过期的刷新令牌,而其他产品则使用仅在数小时或数天内有效的刷新令牌。