使用Postman和JWT的JHipster身份验证
我一直在使用Postman in选项卡扩展来测试调用JHipster资源API的调用,发现它工作得很好(JHipster设置为使用OAuth2)。我使用JHipster登录页面进行了身份验证,然后打开了一个带有Postman扩展名的新选项卡 我刚刚将JHipster应用程序切换为使用JWT,这种使用Postman的方法不再有效,调用API时我的权限被拒绝。此外,Postman的in-tab扩展正在被弃用,取而代之的是独立应用程序使用Postman和JWT的JHipster身份验证,jwt,jhipster,postman,Jwt,Jhipster,Postman,我一直在使用Postman in选项卡扩展来测试调用JHipster资源API的调用,发现它工作得很好(JHipster设置为使用OAuth2)。我使用JHipster登录页面进行了身份验证,然后打开了一个带有Postman扩展名的新选项卡 我刚刚将JHipster应用程序切换为使用JWT,这种使用Postman的方法不再有效,调用API时我的权限被拒绝。此外,Postman的in-tab扩展正在被弃用,取而代之的是独立应用程序 问题:是否有关于设置邮递员进行JHipster/JWT认证的文件
问题:是否有关于设置邮递员进行JHipster/JWT认证的文件 在JWT JHipster应用程序中使用Postman是可能的
授权
标题的任何API请求。JWT令牌是“持有者”右侧的值。您还可以在浏览器的localStorage中的键jhi authenticationToken
下找到此令牌授权
标题。该值应如下所示:
Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJydRkZWxsIiwiYXV0aCI6IlJPTEVfQURNSU4sUk9MRV9U0VSIiwiZXhwIjoxNDgzOTg1MDkzfQ.1A13sBvr3KDWxJQpKDKOS33KAVjWIb3mS_qfxLBOCq_LbMwNHnysAai0SNXXgudMOulAnXYN9_Mzlcv1_zctA
/api/authenticate
发出POST请求:
{“密码”:“管理员”,“用户名”:“管理员”}
。您将收到以下响应:{“id_令牌”:“aabbccddeeff”}
授权:Bearer aabbccddeeff
/api/authenticate
端点发出GET请求对我来说最简单的方法是
它将列出带有令牌的
curl
操作,现在您可以获取令牌并在Postman中使用它如果您部署了单个微服务,并且希望单独测试它,您可以配置Postman使用预请求脚本构建JWT令牌
application-dev.yml
文件,获取base64 secret
值:安全性:
身份验证:
jwt:
#此令牌必须使用Base64进行编码,长度至少为256位(您可以在命令行上键入“openssl rand-Base64”以生成512位的令牌)
base64秘密:N2Y2MmFKNZG2ZTi4NtzizGewmtzhytazoTbHmJWmZKmZr2MZlZJJJZDA2MZQ0NGMXOGFLZTHJJHOWY0MJKZNGVGLoge3ZKxZKxZGi5ZTqxOy3MjewnwwwytuxTuxTuxOxy2U4WmZZJJjVHMJG0NtzKlHnzLHnWnWuYNzYYNzK5NzKXmi=
jhipster\u jwt\u secret的变量中
函数base64url(源代码){
//用经典的base64编码
encodedSource=CryptoJS.enc.Base64.stringify(源代码);
//删除相等字符的填充
encodedSource=encodedSource.replace(/=+$/,“”);
//根据base64url规范替换字符
encodedSource=encodedSource.replace(/\+/g,'-');
encodedSource=encodedSource.replace(//\//g,'.'''.'替换);
返回编码源;
}
变量头={
“典型”:“JWT”,
“alg”:“HS256”
};
var有效载荷={
“sub”:“用户”,
“身份验证”:“角色”
};
var secret=CryptoJS.enc.Base64.parse(postman.getEnvironmentVariable(“jhipster_jwt_secret”);
//编码头
var stringifiedHeader=CryptoJS.enc.Utf8.parse(JSON.stringify(header));
var encodedHeader=base64url(stringifiedHeader);
//编码数据
var stringifiedPayload=CryptoJS.enc.Utf8.parse(JSON.stringify(payload));
var encodedPayload=base64url(stringifiedPayload);
//构建令牌
var-token=encodedHeader+“+”encodedPayload;
//签名令牌
var signature=CryptoJS.HmacSHA256(令牌,秘密);
签名=base64url(签名);
var signedToken=token+“+”签名;
postman.setEnvironmentVariable(“jwt_令牌”,signedToken);
{{jwt_token}
不幸的是,当我尝试使用默认的管理员证书时,我得到了一个错误403,它说,{“type”:“title”:“Unauthorized”,“status”:401,“detail”:“访问此资源需要完全身份验证”,“path”:“/api/authenticate”,“message”:“error.http.401”}For me返回成功(200)但是没有代币。这是有效的,但你知道吗,这是一种痛苦。在新登录后,必须为每个请求复制粘贴授权,这会降低一个请求的速度,并使一个请求失去快速迭代的能力。@geoidesic使用环境变量。然后你可以拥有你所有的API,比如Bearer{{token}。这正是我想要的,因为我有一个带有JWT身份验证的微服务。而且它工作得很好。非常感谢。这是一个很好的建议。非常感谢。但这里我必须从jhipster注册表配置中获取秘密。在没有jhipster注册表实例的情况下,如何开发微服务?