当前位置:   article > 正文

在postman中设置通过jwt-bearer流程获取token_postman jwt token

postman jwt token

简单说一下JWT Bearer 授权:

  1. 客户端(调用方)生成一对公私钥,公钥保存到服务端(授权方),私钥自己保存
  2. 客户端通过私钥生成一个有特定权限的并且有时效的JWT
  3. 客户端使用JWT调用服务器端提供的获取token的接口换取一个代表用户身份的AccessToken

本文介绍postman怎么通过一个私钥,来调用服务器端接口,获取token的

配置步骤

  1. 首先环境里面需要添加环境变量jwt_secret,值为你自己的私钥( -----BEGIN RSA PRIVATE KEY----- ......-----END RSA PRIVATE KEY-----;)

补充:linux下简单生成公私钥对的命令:

openssl req -x509 -nodes -sha256 -days 365 -newkey rsa:1024 -keyout private.pem -out public.pem
  • 1
  1. 设置Pre-request Script 代码
// 设置JWT的头信息, alg表示加密算法,可按自己需求改成其他算法
var header = {
	'alg': 'RS256',
	'typ': 'JWT'
};

var currentTimestamp = Math.floor(Date.now() / 1000);
// 生成的JWT 里带的信息,可以需求自己修改
var payload = { 
    'exp': currentTimestamp + 60 * 5, // 设置过期时间是5分钟后
    'iat': currentTimestamp,
    'iss': pm.environment.get('client_id') || '', 
	'aud': pm.environment.get('jwt_aud')
};

function generateJwt() {
	eval(pm.globals.get('jsrsasign-js')); // import javascript jsrsasign

	var sHeader = JSON.stringify(header);
	var sPayload = JSON.stringify(payload);

	var signedToken = KJUR.jws.JWS.sign(header.alg, sHeader, sPayload, jwtPrivateKey);

	pm.collectionVariables.set('jwt_signed', signedToken);
	console.log('jwt', signedToken);
}

var navigator = {}; // 为库伪造导航器对象
var window = {}; // 为库伪造窗口对象

if (pm.globals.has('jsrsasign-js') && pm.globals.get('jsrsasign-js') != '' ) generateJwt();
else pm.sendRequest(
	'https://kjur.github.io/jsrsasign/jsrsasign-all-min.js',
	function (err, res) {
		if (err) {
			console.log(err);
		} else {
			pm.globals.set('jsrsasign-js', res.text());
			generateJwt();
		}});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  1. 设置postman Body
    body设置grant_type: urn:ietf:params:oauth:grant-type:jwt-bearer
    assertion: {{jwt_signed}}
  2. 设置Test代码
var jsonData = JSON.parse(pm.response.text());
pm.collectionVariables.set("protected_access_token", jsonData.access_token);
pm.collectionVariables.set("protected_refresh_token", jsonData.refresh_token);
pm.collectionVariables.set("protected_access_token_expires_in", new Date().getTime() + jsonData.expires_in * 1000);
  • 1
  • 2
  • 3
  • 4

这块主要是把返回的token,存到环境变量里以供其它API使用,需要根据实际返回修改代码
比如我的返回是:

{
    "access_token": "xxx",
    "token_type": "Bearer",
    "expires_in": 900,
    "refresh_token": "xxxxx",
    "scope": "xxxxx"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

所以我可以通过 jsonData.access_token的方式取到token, 如果实际返回不是上面结构的话 需要按实际情况修改代码

  1. 以上就配置完成了,点击Send按钮,发送请求 获取token
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/923933
推荐阅读
相关标签
  

闽ICP备14008679号