在 Postman 中使用 JWT 对请求进行身份验证和授权
在开始开发严谨的 API 之前,让我们先看看如何使用Postman 来授权我们的请求。在本例中,我们将使用 JSON Web Tokens 来保护和访问我们的 API。
什么是 JWT?
JSON Web Token (JWT) 是一个开放标准,用于以 JSON 对象的形式在各方之间安全地传输信息。它的发音是jot,或者像我们的荷兰朋友说的那样,是 yaywaytay。
JWT 通常用于授权。JWT 可以使用密钥或公钥/私钥对进行签名。用户登录后,后续每个请求都需要 JWT,从而允许用户访问该令牌允许的路由、服务和资源。
设置使用 JWT 身份验证的 API
让我们使用来自 Auth0 的这个Node.js API 示例,它支持使用 JWT 进行用户名和密码身份验证,并且具有返回查克·诺里斯短语的端点。如果您已经有一个正在使用的 API,则可以跳过此步骤。
在本例中,请确保您的计算机上已安装Node.js和npm包管理器。首先克隆仓库,使用 安装依赖项npm install
,然后使用 本地启动服务器node.server.js
。
点击README 文件底部的“在 Postman 中运行”按钮,将示例 Postman 集合导入 Postman 应用。如果您使用自己的 API,请将您的端点替换为此 Postman 集合中包含的示例。
集合中的第一个请求是用于创建用户的 POST 请求。如果您已有用户,请使用集合中的第二个请求创建新会话。在这两种情况下,您都会看到 JSON 响应对象中包含访问令牌。
将 JWT 保存为变量
您可以从响应中复制访问令牌以在下一个请求中使用,但对于您想要授权的每个请求都执行此操作非常繁琐。
相反,我们将 JWT 保存为变量,以便我们可以在以后的请求中反复重用该令牌。创建一个新环境。在“测试”选项卡下,使用 将访问令牌保存为环境变量,然后pm.environment.set()
重新运行请求。
在“快速查看”图标下,我们可以看到我们的 JWT 已保存为环境变量。现在我们可以在后续请求中使用我们的令牌了。
在 Postman 中将 JWT 添加到标头
有两种方法可以发送您的 JWT 以在 Postman 中授权您的请求:添加标头或使用授权助手。
选项 1:添加授权标头
第一个选项是添加标头。在“标头”选项卡下,添加一个名为 的键,Authorization
其值为Bearer <your-jwt-token>
。使用双花括号语法替换令牌的变量值。
如果您的授权接受自定义语法,您可以在此处手动调整前缀(例如,Token <your-access-token>
而不是Bearer <your-access-token
)。
选项 2:使用授权助手
第二种选择是使用授权助手。在“授权”选项卡下,选择 Bearer Token 授权类型。使用双花括号语法替换令牌的变量值。
点击橙色的“预览请求”按钮,即可看到“标题”选项卡下已添加一个临时标题。此临时标题不会随您的请求或集合一起保存。
这两种方法有什么区别?具体使用哪种方法取决于你计划如何使用它。
选项 1:添加授权标头
- 用户可以调整前缀(例如,
Token <your-access-token>
代替Bearer <your-access-token>
)。 - 授权标头明确显示在API 文档中。
- 使用这两个选项,您可以与团队成员共享请求和集合。标头与请求和集合一起保存在
header
属性下。
选项 2:使用授权助手
- 可在集合、文件夹或请求级别设置授权。可轻松为集合或文件夹内的每个请求设置相同的授权方法。
- 使用这两个选项,您可以与队友共享请求和集合。授权信息保存在
auth
属性下。
检查令牌过期的脚本
JWT 令牌并非永久有效。经过指定的一段时间后,它们将过期,您需要重新获取一个新的。
再次强调,有两种方法可以检查 JWT 的过期时间。具体选择哪种方法取决于您的具体情况。
选项 1:在收集开始时单独提出请求
如果您处理的是快速运行的小型集合,或者您拥有一个在集合运行结束时不太可能过期的长寿命令牌,则此选项是理想之选。在这种情况下,请在集合开始时创建一个初始请求来检索和存储令牌。您可以在集合运行的剩余时间内使用相同的令牌值。
选项 2:在每次请求之前运行的预请求脚本
如果您处理的是大型集合,并且可能需要一段时间才能运行,或者您持有的令牌可能很快就会过期,那么此选项非常适合。在这种情况下,请在请求前脚本中添加一些逻辑来检查当前令牌是否已过期。如果令牌已过期,请获取一个新令牌(例如使用pm.sendRequest()
),然后重置新令牌的生存时间。使用此方法时,请记住,您可以使用集合或文件夹级别的脚本在对集合或文件夹进行每个请求之前运行此检查。
保持私密的会议
假设你将 JWT 保存为 Postman 环境变量,并且由于项目协作而与团队成员共享了该环境变量。你能将这些信息保密,以便你的团队成员无法访问吗?
是的,你可以!
会话是 Postman 应用中的一个附加层,用于在本地存储变量值。默认情况下,会话不会与 Postman 服务器同步。除非您明确同步到云端,否则在单个会话中捕获的更改将保留在 Postman 实例的本地。
转到“设置”,然后关闭“自动保留变量值”。
现在,当您发送请求并设置变量时,当前值将被填充。您可以将其视为存储在本地会话中的值。
如果您想与团队成员共享此值或将其同步到 Postman 服务器,则需要执行另一个步骤以明确同步到云端。要将所有“当前值”同步到“初始值”,请点击“全部保留”。要仅将单个“当前值”同步到“初始值”,请将该值从第三列复制并粘贴到第二列。
会话变量允许您在协作环境中重复使用数据并确保其安全。它们允许您更精细地控制同步到服务器或与团队成员共享信息。了解更多关于会话的信息,或观看关于使用会话的视频。
想要通过其他 API 安全指导原则来确保您的 API 安全可靠吗?
阅读Postman Engineering 博客上的完整文章。
文章来源:https://dev.to/joycejetson/using-jwt-to-authenticate-and-authorize-requests-in-postman-3a5h