使用Postman和JWT进行JHipster身份验证

问题描述 投票:11回答:4

我一直在使用Postman in-tab扩展来测试调用JHipster资源API的调用,发现它工作得很好(JHipster设置使用OAuth2)。我使用JHipster登录页面进行了身份验证,然后打开了一个带有Postman扩展的新选项卡。

我只是将我的JHipster应用程序切换为使用JWT,这种使用Postman的方法不再有效,我在调用API时获得了许可。此外,Postman的标签内扩展程序已被弃用,以支持独立应用程序。

问题:是否有关于设置Postman以对JHipster / JWT进行身份验证的文档?

jwt jhipster postman
4个回答
12
投票
  1. 使用以下正文向/api/authenticate发出POST请求:{"password":"admin","username":"admin"}。您将收到以下回复:{"id_token":"aabbccddeeff"}
  2. 使用上一次调用中收到的令牌的值进行后续请求,并输入Authorization: Bearer aabbccddeeff
  3. 您可以检查身份验证的状态,向/api/authenticate端点发出GET请求

14
投票

可以使用Postman和JWT JHipster应用程序。

  1. 首先,使用JHipster应用程序进行身份验证
  2. 检查Authorization标头的任何API请求。 JWT标记是“承载”右侧的值。您还可以在密钥jhi-authenticationToken下的浏览器localStorage中找到此令牌。
  3. 编辑Postman中的标题并添加Authorization标题。该值应如下所示: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJydRkZWxsIiwiYXV0aCI6IlJPTEVfQURNSU4sUk9MRV9U0VSIiwiZXhwIjoxNDgzOTg1MDkzfQ.1A13sBvr3KDWxJQpKDKOS33KAVjWIb3mS_qfxLBOCq_LbMwNHnysAai0SNXXgudMOulAnXYN9_Mzlcv1_zctA

2
投票

如果您已部署单个微服务并且想要单独测试它,则可以将Postman配置为使用预请求脚本构建JWT令牌。

  1. 转到JHipster生成的application-dev.yml文件并获取base64-secret值:
security:
    authentication:
        jwt:
            # This token must be encoded using Base64 and be at least 256 bits long (you can type `openssl rand -base64 64` on your command line to generate a 512 bits one)
            base64-secret: N2Y2MmFkNzg2ZTI4NTZiZGEwMTZhYTAzOTBhMjgwMzlkMzU2MzRlZjJjZDA2MzQ0NGMxOGFlZThjOWY0MjkzNGVlOGE3ZjkxZGI5ZTQxOGY3MjEwNWUwYTUxMTUxODYxY2U4ZWMzZjVhMjg0NTZkNzlhNWUyMmEyNjQ5NzkxZmI=
  1. 将值放在Postman环境中名为jhipster_jwt_secret的变量中。
  2. 配置预请求脚本(this is largely copied from a Gist):
function base64url(source) {
    // Encode in classical base64
    encodedSource = CryptoJS.enc.Base64.stringify(source);

    // Remove padding equal characters
    encodedSource = encodedSource.replace(/=+$/, '');

    // Replace characters according to base64url specifications
    encodedSource = encodedSource.replace(/\+/g, '-');
    encodedSource = encodedSource.replace(/\//g, '_');

    return encodedSource;
}

var header = {
    "typ": "JWT",
    "alg": "HS256"
};

var payload = {
  "sub": "user",
  "auth": "role"
};

var secret = CryptoJS.enc.Base64.parse(postman.getEnvironmentVariable("jhipster_jwt_secret"));

// encode header
var stringifiedHeader = CryptoJS.enc.Utf8.parse(JSON.stringify(header));
var encodedHeader = base64url(stringifiedHeader);

// encode data
var stringifiedPayload = CryptoJS.enc.Utf8.parse(JSON.stringify(payload));
var encodedPayload = base64url(stringifiedPayload);

// build token
var token = encodedHeader + "." + encodedPayload;

// sign token
var signature = CryptoJS.HmacSHA256(token, secret);
signature = base64url(signature);
var signedToken = token + "." + signature;

postman.setEnvironmentVariable("jwt_token", signedToken);
  1. 在授权选项卡内选择“承载令牌”并在令牌输入字段中写入{{jwt_token}}

1
投票

对我来说最简单的方法是

  1. 使用管理员凭据登录您的Jhipster Web应用程序
  2. 选择Administration> API

enter image description here

  1. 然后选择任何现有API并单击“试一试”按钮enter image description here

它将使用令牌列出curl动作,现在您可以抓取令牌并在Postman中使用它

© www.soinside.com 2019 - 2024. All rights reserved.