web-dev-qa-db-ja.com

PostmanとJWTを使用したJHipster認証

Postmanのタブ内拡張を使用して、JHipsterリソースAPIを呼び出す呼び出しをテストしていて、それがうまく機能していることを発見しました(OAuth2を使用するようにJHipsterを設定)。 JHipsterのログインページを使用して認証した後、Postman拡張を使用して新しいタブを開きました。

JHipsterアプリケーションをJWTを使用するように切り替えたところ、Postmanを使用するこの方法は機能しなくなりました。APIを呼び出すときに、アクセスが拒否されました。さらに、スタンドアロンアプリの代わりに、Postmanのタブ内拡張が非推奨になりました。

質問:JHipster/JWTに対して認証するためのPostmanの設定に関するドキュメントはありますか?

16
Jose Gulisano
  1. 次の本文でPOST /api/authenticateへのリクエスト]を作成します:{"password":"admin","username":"admin"}。次の応答を受け取ります:{"id_token":"aabbccddeeff"}
  2. 前の呼び出しで受け取ったトークンの値を使用して後続のリクエストを作成し、Authorization: Bearer aabbccddeeffに入れます
  3. 認証のステータスを確認し、/api/authenticateエンドポイントにGETリクエストを送信できます。
16

JWT JHipsterアプリでPostmanを使用することが可能です。

  1. まず、JHipsterアプリで認証します
  2. AuthorizationヘッダーのAPIリクエストを調べます。 JWTトークンは、「Bearer」の右側の値です。このトークンは、ブラウザのlocalStorageのキーjhi-authenticationTokenの下にもあります。
  3. Postmanでヘッダーを編集し、Authorizationヘッダーを追加します。値は次のようになります。

    Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJydRkZWxsIiwiYXV0aCI6IlJPTEVfQURNSU4sUk9MRV9U0VSIiwiZXhwIjoxNDgzOTg1MDkzfQ.1A13sBvr3KDWxJQpKDKOS33KAVjWIb3mS_qfxLBOCq_LbMwNHnysAai0SNXXgudMOulAnXYN9_Mzlcv1_zctA
    
16
Jon Ruddell

単一のマイクロサービスをデプロイし、それを分離してテストする場合は、事前要求スクリプトを使用してJWTトークンを構築するようにPostmanを構成できます。

  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. リクエスト前のスクリプトを設定します( これは主に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. [Authorization]タブ内で[Bearer token]を選択し、[Token]入力フィールドに{{jwt_token}}と書き込みます。
5
xonya

私にとって最も簡単な方法は

  1. 管理者資格情報を使用してJhipster Webアプリにログインします

  2. [管理]> [API]を選択します

enter image description here

  1. 次に、既存のAPIのいずれかを選択し、[試してみる]ボタンをクリックします enter image description here

トークンとともにcurlアクションがリストされます。これで、トークンを取得してPostmanで使用できます

1
Haifeng Zhang