코그니토로 계정을 생성해보았고, 이제 그 계정으로 로그인해본다
사실 로그인이라기 보단,
유효한 토큰을 얻고, 그 토큰으로 api를 호출할 수 있는 권한을 얻는다
라고 이해해야한다
로그인 이라는 개념자체가 그러니까..
무튼 FE에서 입력된 정보로 코그니토에 권한을 체크받아서 JWT 토큰 등을 받아보자
UserServiceImpl.java
@Override
public SignInResponseDTO signIn(SignInRequestDTO signInRequestDTO) throws Exception {
final String emailAddress = signInRequestDTO.getEmailAddress();
final String password = signInRequestDTO.getPassword();
AwsCognitoUserDTO awsCognitoUserDTO =
AwsCognitoUserDTO.ByEmailAddressPasswordBuilder()
.emailAddress(emailAddress)
.password(password)
.build();
awsCognitoUserDTO.setName("testName");
AuthenticationResultType cognitosignInResult =
awsCognitoService.signInCognito(awsCognitoUserDTO);
System.out.println(">>>> idToken \n\n\n" + cognitosignInResult.getIdToken());
System.out.println(">>>> getAccessToken \n\n\n" + cognitosignInResult.getAccessToken());
System.out.println(">>>> getRefreshToken \n\n\n" + cognitosignInResult.getRefreshToken());
return null;
}
User 서비스 단에서 토큰을 얻고 그걸 FE로 반환해줘야함!
AwsCognitoServiceImpl.java
@Override
public AuthenticationResultType signInCognito(AwsCognitoUserDTO awsCognitoUserDTO)
throws Exception {
AWSCognitoIdentityProvider cognitoClient = getCognitoClient();
Map<String, String> authParams = new HashMap<>();
authParams.put("EMAIL", awsCognitoUserDTO.getEmailAddress());
authParams.put("USERNAME", awsCognitoUserDTO.getName());
authParams.put("PASSWORD", awsCognitoUserDTO.getPassword());
AdminInitiateAuthRequest authRequest =
new AdminInitiateAuthRequest()
.withAuthFlow(AuthFlowType.ADMIN_NO_SRP_AUTH)
.withClientId(clientId)
.withUserPoolId(userPoolId)
.withAuthParameters(authParams);
AdminInitiateAuthResult result = cognitoClient.adminInitiateAuth(authRequest);
cognitoClient.shutdown();
return result.getAuthenticationResult();
}
어쨋든 이런식으로 구성을 하고 signIn 을 호출해서 토큰값을 받아보자
생성된 idToken
값으로 https://jwt.io/ 여기서 확인해보면 어떤 정보가 담겨있는지 확인하고, 유효한지 여부도 체크할 수 있다.
이렇게해서 코그니토로 올바르게 JWT 생성 완료!