带有JWT令牌的REST API
因此,我目前正在使用NodeJS,ExpressJS和JWT作为身份验证为我的Web应用程序学习/构建REST API后端服务器。我的查询是关于在无需从Web应用程序发送有效负载的情况下识别服务器中JWT令牌所有者的最佳实践-因为这限制了我不想使用的GET HTTP方法的使用。
[您可能会问为什么我要确定JWT令牌的所有者,我从中学到的所有示例教程都把用户当作了必需的对象,这很简单,只要有一个端点说GET / user /:userId。但是,对于其他特定于用户的端点(例如博客文章),我真的不想诉诸GET / user /:userId / blog /:id,因此也不想使用我的泡菜。
[我可能考虑得太深了,最简单的解决方案正在盯着我-对此我表示歉意。但是我已经考虑了一些想法,包括我目前正在使用的想法,我想请您提供一些反馈意见,或者是否有更好的方法可以做到这一点。
场景:用户已经登录,他们希望在端点GET / blog /:id上查看其博客,但是服务器需要验证用户是否有权查看该博客
1。将用户ID传递到标题内(我当前正在使用的那个)
这可能是最简单的方法。我只是在标题内包含用户ID。
headers: { "Content-Type": "application/json", Authorization: `Bearer ${jwtToken}`, UserId: userId }
是否有必要强制在标头中为服务器的所有调用发送附加数据,更重要的是这样做是否安全?
2。强制所有端点包含/ user /:userId
另一个简单的名称,使其变为GET / user /:userId / blog /:id。虽然这很好,但我对解决方案感到不满。但是,如果这被认为是通常的做法,那就去吧。
3。根据用户ID缓存令牌
这可能是我可以想到的“最佳”解决方案,因为它还可以充当另一层身份验证,并且还可以轻松识别令牌的所有者。但是,这给服务器增加了另一层复杂性,如果需要的话还可以,但是我总是觉得越少越好。
4。暂时将令牌保存在数据库中
类似于数字3,并且可能比必须添加缓存层更容易。但是,我不知道将数据库用作临时存储是否有任何影响。
所以这就是我目前所在的位置。非常感谢您的时间和回复。预先谢谢你。
因此,我目前正在使用NodeJS,ExpressJS和JWT作为身份验证为我的Web应用程序学习/构建REST API后端服务器。我的查询是关于识别所有者的最佳做法...
回答如下:通常将用户ID编码在JWT令牌中,然后JWT中间件设置属性request.user
。
带有JWT令牌的REST API
因此,我目前正在使用NodeJS,ExpressJS和JWT作为身份验证为我的Web应用程序学习/构建REST API后端服务器。我的查询是关于在无需从Web应用程序发送有效负载的情况下识别服务器中JWT令牌所有者的最佳实践-因为这限制了我不想使用的GET HTTP方法的使用。
[您可能会问为什么我要确定JWT令牌的所有者,我从中学到的所有示例教程都把用户当作了必需的对象,这很简单,只要有一个端点说GET / user /:userId。但是,对于其他特定于用户的端点(例如博客文章),我真的不想诉诸GET / user /:userId / blog /:id,因此也不想使用我的泡菜。
[我可能考虑得太深了,最简单的解决方案正在盯着我-对此我表示歉意。但是我已经考虑了一些想法,包括我目前正在使用的想法,我想请您提供一些反馈意见,或者是否有更好的方法可以做到这一点。
场景:用户已经登录,他们希望在端点GET / blog /:id上查看其博客,但是服务器需要验证用户是否有权查看该博客
1。将用户ID传递到标题内(我当前正在使用的那个)
这可能是最简单的方法。我只是在标题内包含用户ID。
headers: { "Content-Type": "application/json", Authorization: `Bearer ${jwtToken}`, UserId: userId }
是否有必要强制在标头中为服务器的所有调用发送附加数据,更重要的是这样做是否安全?
2。强制所有端点包含/ user /:userId
另一个简单的名称,使其变为GET / user /:userId / blog /:id。虽然这很好,但我对解决方案感到不满。但是,如果这被认为是通常的做法,那就去吧。
3。根据用户ID缓存令牌
这可能是我可以想到的“最佳”解决方案,因为它还可以充当另一层身份验证,并且还可以轻松识别令牌的所有者。但是,这给服务器增加了另一层复杂性,如果需要的话还可以,但是我总是觉得越少越好。
4。暂时将令牌保存在数据库中
类似于数字3,并且可能比必须添加缓存层更容易。但是,我不知道将数据库用作临时存储是否有任何影响。
所以这就是我目前所在的位置。非常感谢您的时间和回复。预先谢谢你。
因此,我目前正在使用NodeJS,ExpressJS和JWT作为身份验证为我的Web应用程序学习/构建REST API后端服务器。我的查询是关于识别所有者的最佳做法...
回答如下:通常将用户ID编码在JWT令牌中,然后JWT中间件设置属性request.user
。