Postmanのタブ内拡張を使用して、JHipsterリソースAPIを呼び出す呼び出しをテストしていて、それがうまく機能していることを発見しました(OAuth2を使用するようにJHipsterを設定)。 JHipsterのログインページを使用して認証した後、Postman拡張を使用して新しいタブを開きました。
JHipsterアプリケーションをJWTを使用するように切り替えたところ、Postmanを使用するこの方法は機能しなくなりました。APIを呼び出すときに、アクセスが拒否されました。さらに、スタンドアロンアプリの代わりに、Postmanのタブ内拡張が非推奨になりました。
質問:JHipster/JWTに対して認証するためのPostmanの設定に関するドキュメントはありますか?
/api/authenticate
へのリクエスト]を作成します:{"password":"admin","username":"admin"}
。次の応答を受け取ります:{"id_token":"aabbccddeeff"}
Authorization: Bearer aabbccddeeff
に入れます/api/authenticate
エンドポイントにGETリクエストを送信できます。JWT JHipsterアプリでPostmanを使用することが可能です。
Authorization
ヘッダーのAPIリクエストを調べます。 JWTトークンは、「Bearer」の右側の値です。このトークンは、ブラウザのlocalStorageのキーjhi-authenticationToken
の下にもあります。Postmanでヘッダーを編集し、Authorization
ヘッダーを追加します。値は次のようになります。
Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJydRkZWxsIiwiYXV0aCI6IlJPTEVfQURNSU4sUk9MRV9U0VSIiwiZXhwIjoxNDgzOTg1MDkzfQ.1A13sBvr3KDWxJQpKDKOS33KAVjWIb3mS_qfxLBOCq_LbMwNHnysAai0SNXXgudMOulAnXYN9_Mzlcv1_zctA
単一のマイクロサービスをデプロイし、それを分離してテストする場合は、事前要求スクリプトを使用してJWTトークンを構築するようにPostmanを構成できます。
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=
Postman環境内のjhipster_jwt_secret
という変数に値を入れます。
リクエスト前のスクリプトを設定します( これは主に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);
{{jwt_token}}
と書き込みます。