All the Things about IT & US stocks
테스팅

Postman: AWS Cognito 연동하기

배경: Postman을 사용해서 API 테스팅을 자동화해야 하며 AWS Cognito에서 인증을 수행해야함.

  • 애플리케이션에서 사용자를 인증하고 관련 토큰을 발행하기 위해 AWS Cognito를 사용함
  • Postman에서 API 테스팅을 위해 AWS Cognito 인증(Authorization)을 수행해야함
  • Postman의 API 테스팅은 자동화 되서 CI/CD에 연동해야함. 즉 AWS Cognito 인증 및 API 테스팅이 자동화 되어야함.

설정과정:
모든 API 테스트 과정을 자동화해야 하기 때문에 Pre-request Script를 활용.

Postman Pre-request Script:

var clientId = pm.environment.get(“cognitoClientId”);
var username = pm.environment.get(“cognitoUserName”);
var password = pm.environment.get(“cognitoUserPassword”);

pm.sendRequest({
url: “https://cognito-idp.ap-southeast-2.amazonaws.com/”,
method: ‘POST’,
header: {
‘X-Amz-Target’: ‘AWSCognitoIdentityProviderService.InitiateAuth’,
‘Content-Type’: ‘application/x-amz-json-1.1’
},
body: {
mode: ‘raw’,
raw: JSON.stringify({
“AuthParameters”: {
“USERNAME”: username,
“PASSWORD”: password
},
“AuthFlow”: “USER_PASSWORD_AUTH”,
“ClientId”: clientId,
}),
options: {
raw: {
language: ‘json’
}
}
}
}, function (error, response) {
console.log(response.json());
pm.environment.set(“cognitoAccessToken”, response.json().AuthenticationResult.AccessToken);
pm.environment.set(“cognitoIdToken”, response.json().AuthenticationResult.IdToken);
});

Pre-request Script

스크립트에 포함된 변수들은 Environments 탭에서 VARIABLE로 정의(define) 해두어야 하며 url 또한 자신의 환경에 맞게 설정해줘야 한다:

  • cognitoClientId
  • cognitoUserName
  • cognitoUserPassword
  • cognitoAccessToken
  • cognitoIdToken

위의 스크립트를 실행하면 AWS Cognito의 AccessToken을 획득할 수 있다. 해당 AccessToken을 API 요청의 Authorization 헤더에 포함시켜 전송하면 성공적인 결과를 얻을 수 있다.

Postman Authorization탭에 Token 설정
Postman Authorization탭에 Token 설정

트러블 슈팅:
Postman Pre-request Script 실행 과정에서 발생한 에러:

{“__type”:”InvalidParameterException”,”message”:”USER_PASSWORD_AUTH flow not enabled for this client”}

메시지에 나온 것처럼, “USER_PASSWORD_AUTH flow not enabled for this client” 에러는 AWS Cognito에서 USER_PASSWORD_AUTH flow를 허용하지 않았기 때문에 나오는 에러이다.
AWS Cognito에서 USER_PASSWORD_AUTH flow를 활성화(enable) 해주면 해결된다.

AWS Cognito에서 USER_PASSWORD_AUTH flow 활성화 방법:
AWS 콘솔에 로그인 한 후 AWS Cognito로 이동해서 App integration -> App client list -> App client information(Edit)-> ALLOW_USER_PASSWARD_AUTH를 활성화 해주면 된다

USER_PASSWORD_AUTH란:
USER_PASSWORD_AUTH – Non-SRP authentication flow; USERNAME and PASSWORD are passed directly. If the USERNAME is not found in the user pool and a user migration Lambda trigger is set, this flow will invoke the user migration Lambda function.

참고:

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

back to top