Nat*_*ter 28 oauth oauth-2.0 postman
目标
在运行集合之前,无需单独执行每个调用的授权过程即可运行集合.
我试过/注意到了什么
在Postman中使用OAuth2授权助手时,我还没有发现保存返回的刷新令牌的方法,因此在访问令牌到期时使用它来获取新的令牌.(我已经建议将这个功能放在Postman Github问题的帮手中.)
我已经尝试在集合的开头创建一些步骤来复制帮助程序,但无法通过需要用户交互来批准/拒绝的步骤(这是有道理的,否则会带来安全风险).但是,我似乎无法弄清楚如何以OAuth2助手的方式提示用户.
关于刷新令牌,我已经把我的期望提高了一个档次,并认为我可以在列表中的第一个测试中运行身份验证,以某种方式在全局或环境变量中保存访问令牌,然后在所有后续测试,但我还没有找到一种方法来保存通过OAuth2助手生成的访问令牌.
我很想知道是否有一个解决方案,这使得集合能够以最小的努力运行授权.对于所有使用OAuth2授权的集合中编写的更多测试,这变得更加重要.
旁注:我一直在使用Postman mac客户端,以防我不知道的客户端有所不同.
Per*_*ega 43
好的,首先输入您的OAUTH令牌URL,单击Body选项卡,然后填写这些POST参数:client_id,grant_type,username,password,override.
然后,单击"测试"选项卡,输入此文本,然后按"发送":
var data = JSON.parse(responseBody);
postman.setGlobalVariable("access_token", data.access_token);
postman.setGlobalVariable("refresh_token", data.refresh_token);
Run Code Online (Sandbox Code Playgroud)
然后输入您的一个应用程序URL,单击Headers选项卡,然后输入一个带有Bearer {{access_token}}值的参数Authorization.然后单击"发送".
瞧!
Nat*_*ter 15
我在github上找到了答案.
首先,设置这些环境变量:
url :(您的API端点)access_token :(空白)refresh_token :(空白)client_id :(您的client_id)client_secret :(你的client_secret)username : (您的用户名)password : (你的密码)接下来,创建一个access_token使用the 的新调用password grant_type.
在我的情况下,我发布到{{url}}/access_token.通过此调用发送的是以下信息,作为form-data"正文"选项卡中指定的键/值对:
grant_type : passwordusername : {{username}}password : {{password}}client_id : {{client_id}}client_secret : {{client_secret}}发送此POST将导致类似此响应:
{
"access_token": "kciOMpcmRcGTKfoo",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "DMGAe2TGaFbar"
}
Run Code Online (Sandbox Code Playgroud)
然后,在Tests选项卡中,我添加了以下代码来分配两个环境变量,access_token和refresh_token.
var data = JSON.parse(responseBody);
postman.setEnvironmentVariable("access_token", data.access_token);
postman.setEnvironmentVariable("refresh_token", data.refresh_token);
Run Code Online (Sandbox Code Playgroud)
注意:我也在那里进行测试,只是为了确保至少这个调用也能正常工作,尽管这与原始问题无关:
var jsonData = JSON.parse(responseBody);
tests["token_type is Bearer"] = jsonData.token_type === "Bearer";
Run Code Online (Sandbox Code Playgroud)
现在,任何新的呼叫创建可以使用access_token由第一呼叫作为这样的一个环境变量产生:{{access_token}}.在我的情况下,我转到呼叫/测试中的标题选项卡并添加此密钥/对:
Authorization : Bearer {{access_token}}加分点:我这里没有给出一个例子,但理论上我可以添加一个预先请求脚本来测试access_tokenAPI 的当前(非空白),如果失败,使用给定的(非非)获取新的空白)refresh_token.这样就可以了,所以我不必担心访问令牌过期.
这一切都说,我不喜欢这个解决方案,因为它需要将第一个access_token调用添加到我的集合中的每个子文件夹,因为如果我只想运行一个子文件夹而不是整个集合,我需要制作我确定我有一个新的access_token.不这样做意味着当access_token到期时,所有测试都将失败.如果您从未在Collection Runner中单独运行子文件夹,则只需创建一个access_token调用并将其设置为在集合中运行的第一个调用即可.
但是,出于这个原因,我不打算将此标记为正确答案.我猜测有一个比我想出的更好的答案 - 理想情况下我不需要在每个子文件夹中复制相同的access_token调用/测试,但确实获得了自动化,非交互式的好处测试具有自行运行子文件夹或整个集合的灵活性.
首先,从线程中阅读此答案。现在,考虑这个问题的后半部分(基于评论):
如何使用刷新令牌?
username和password。替换grant_type为“refresh_token”。添加refresh_token值“{{refresh_token}}”,这是对您第一次授权时创建的变量的引用(您还记得阅读这个答案吗?)哼!
| 归档时间: |
|
| 查看次数: |
23823 次 |
| 最近记录: |