首页 > 解决方案 > api 测试预请求脚本的新功能 - 使用 OAuth 2.0 Grant Type 'Client Credentials' 自动获取访问令牌

问题描述

我已经被困了好几天,浏览了很多文章,但找不到可以帮助我的脚本。

POST该脚本的基础是在我使用方法之前自动获取授权令牌。

如前所述,在获取此特定 api 的访问令牌时,授权类型是Client Crentials,手动获取令牌时需要以下字段:-

Token Name, Grant Type, Access Token URL, Client ID, Client Secrect,ScopeClient Authentication.

是否有一个简单的脚本可以在实际执行之前为我执行此POST操作,因为手动获取令牌很烦人。

在此先感谢您的帮助。

亲切的问候

只是一个更新,我现在找到了一种实际获取令牌的方法,所以如果你执行以下操作。

  1. 添加新请求
  2. 选择“发布”
  3. 输入 api 网址
  4. 点击“正文”
  5. 点击“x-www-form-urlencoded”
  6. 我输入了以下“密钥”(输入您自己对应的“值”)-“client_id”、“client_secret”、“scope”和“grant type”
  7. 点击“发送”

这将为您提供令牌,我现在需要找到一种方法来在新请求中提取令牌或找到将其放入预请求脚本中的方法,这样我就可以将需要的数据输入为“原始” JSON。

再次,如果有人可以提供帮助,将不胜感激。

亲切的问候

标签: apiscriptingrequestautomated-testspostman

解决方案


这对你有帮助吗?或者至少让你更接近你需要的东西?

如果您将此脚本添加到Collection关卡pre-request script,它将获取令牌并将其设置为jwt变量。Headers您可以在主请求中使用此变量,使用{{jwt}}语法 - 此脚本还expiry_in从令牌响应中获取值并将其设置为变量。

在集合中的每个请求上,它将运行脚本并检查环境文件中是否有AccessTokenExpiryjwt属性,它还会检查令牌是否已过期。如果这些陈述中的任何一个是真实的,它将为您获得另一个令牌。如果这些都可以,它将使用您设置的内容。

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

访问集合级别元素


推荐阅读