在postman中设置通过jwt-bearer流程获取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. 设置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. 设置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);

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

{
    "access_token": "xxx",
    "token_type": "Bearer",
    "expires_in": 900,
    "refresh_token": "xxxxx",
    "scope": "xxxxx"
}

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

  1. 以上就配置完成了,点击Send按钮,发送请求 获取token
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值