api - api 测试预请求脚本的新功能 - 使用 OAuth 2.0 Grant Type 'Client Credentials' 自动获取访问令牌
问题描述
我已经被困了好几天,浏览了很多文章,但找不到可以帮助我的脚本。
POST
该脚本的基础是在我使用方法之前自动获取授权令牌。
如前所述,在获取此特定 api 的访问令牌时,授权类型是Client Crentials
,手动获取令牌时需要以下字段:-
Token Name
, Grant Type
, Access Token URL
, Client ID
, Client Secrect
,Scope
和Client Authentication
.
是否有一个简单的脚本可以在实际执行之前为我执行此POST
操作,因为手动获取令牌很烦人。
在此先感谢您的帮助。
亲切的问候
只是一个更新,我现在找到了一种实际获取令牌的方法,所以如果你执行以下操作。
- 添加新请求
- 选择“发布”
- 输入 api 网址
- 点击“正文”
- 点击“x-www-form-urlencoded”
- 我输入了以下“密钥”(输入您自己对应的“值”)-“client_id”、“client_secret”、“scope”和“grant type”
- 点击“发送”
这将为您提供令牌,我现在需要找到一种方法来在新请求中提取令牌或找到将其放入预请求脚本中的方法,这样我就可以将需要的数据输入为“原始” JSON。
再次,如果有人可以提供帮助,将不胜感激。
亲切的问候
解决方案
这对你有帮助吗?或者至少让你更接近你需要的东西?
如果您将此脚本添加到Collection
关卡pre-request script
,它将获取令牌并将其设置为jwt
变量。Headers
您可以在主请求中使用此变量,使用{{jwt}}
语法 - 此脚本还expiry_in
从令牌响应中获取值并将其设置为变量。
在集合中的每个请求上,它将运行脚本并检查环境文件中是否有AccessTokenExpiry
和jwt
属性,它还会检查令牌是否已过期。如果这些陈述中的任何一个是真实的,它将为您获得另一个令牌。如果这些都可以,它将使用您设置的内容。
const moment = require('moment')
const getJWT = {
url: `<your token base path>/Auth/connect/token`,
method: 'POST',
header: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: {
mode: 'urlencoded',
urlencoded: [
{key: 'grant_type', value: 'client_credentials'},
{key: 'scope', value: '<scope details>'}
{key: 'client_id', value: 'your creds'}
{key: 'client_secret', value: 'your creds'}
]
}
}
var getToken = true
if (!_.has(pm.environment.toObject(), 'AccessTokenExpiry')
|| !_.has(pm.environment.toObject(), 'jwt')
|| pm.environment.get('AccessTokenExpiry') <= moment().valueOf()) {
} else {
getToken = false
}
if (getToken) {
pm.sendRequest(getJWT, (err, res) => {
if (err === null) {
pm.environment.set('jwt', `Bearer ${res.json().access_token}`)
var expiryDate = moment().add(res.json().expires_in, 's').valueOf()
pm.environment.set('AccessTokenExpiry', expiryDate)
}
})
}
要访问集合级别的元素,如果将鼠标悬停在集合名称上并单击...
图标,将显示菜单选项列表。选择edit
。
推荐阅读
- python - spyder 不在绘图窗格中生成图形
- reactjs - 减速机异常
- python - LNK1104 无法打开文件'python39_d.lib'
- python - 如何在 TensorFlow Serving 之前添加自定义特征转换逻辑?
- reactjs - 如何遍历 Promise 的结果以将其传递给 React 组件
- coldfusion - ColdFusion CommandBox - 禁止消息
- javascript - Vue Quasar q-table用于数组中的多个数组
- rdf - 如何使用 foaf 指定类属性
- django - 未找到 Ajax Django 404
- git - 创建 GIT 工作树的问题