[英]Generating refresh tokens and access tokens in node server
我正在构建手机和 web 应用程序。 两个应用程序都将与节点服务器通信。 我正在使用 JWT 进行身份验证。
目前,我有以下代码来生成访问令牌:
const token = jwt.sign({ user: body }, "top_secret");
我真的对刷新令牌和访问令牌感到困惑:
如何使刷新令牌无效? 我见过使用数据库存储刷新令牌的示例。 当您想要使访问令牌无效时,将删除刷新令牌。 如果刷新令牌将存储在用户 model 上的数据库中以供访问,对吗? 在这种情况下似乎应该加密
当用户登录我的应用程序时,我是否同时发送访问令牌和刷新令牌? 我在某处(不记得在哪里)读到发送访问令牌和刷新令牌不是一个好习惯。
请注意,在典型的 OAuth2 场景中,颁发令牌的服务器(授权服务器)和使用访问令牌的 API 服务器(资源服务器)并不相同。 另请参阅: Oauth2 角色。
要回答您的问题:
您在服务器上生成一个足够熵的字符串,并将其用作授权服务器中数据库记录的主键。 请参阅刷新令牌语法。
从https://tools.ietf.org/html/rfc6749#section-1.5 ,
刷新令牌是一个字符串,表示资源所有者授予客户端的授权。 该字符串通常对客户端是不透明的。
您可以,但刷新令牌通常不是结构化令牌(如 JWT),因为它们由发布它们的同一服务器使用。
是的
不
除非您使用自省令牌,否则没有一种使它们无效的好方法。 只是让他们的生命短暂。
如果从授权服务器存储中删除。 如果在服务器上找不到刷新令牌,则不能使用它来刷新访问令牌。 刷新令牌通常只是保存有关客户端、用户和刷新令牌到期数据的数据库记录的主键。 虽然您不想泄露您的刷新令牌,但它通常需要使用它们的客户端提供客户端凭据才能使用它。
用户在授权服务器上登录。 它向客户端返回访问令牌和刷新令牌(如果您的客户端是机密的)。 客户端单独使用访问令牌来访问您在资源服务器上的数据。
您的客户端在对授权服务器的调用中使用刷新令牌来获取新的访问令牌。 因此,您的客户端仅将访问令牌发送到资源服务器,仅将刷新令牌发送到授权服务器。
这取决于您的威胁 model。 当您的刷新令牌过期时,用户将被迫再次进行身份验证。 一些产品使用永不过期的刷新令牌,其他产品使用仅在几小时或几天内有效的刷新令牌。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.