#8 BE 세팅(cognito) 적용 -3 SignIn

또여·2022년 11월 4일
0

사업아이템

목록 보기
9/11

코그니토로 계정을 생성해보았고, 이제 그 계정으로 로그인해본다

사실 로그인이라기 보단,

유효한 토큰을 얻고, 그 토큰으로 api를 호출할 수 있는 권한을 얻는다

라고 이해해야한다
로그인 이라는 개념자체가 그러니까..

무튼 FE에서 입력된 정보로 코그니토에 권한을 체크받아서 JWT 토큰 등을 받아보자

코그니토 권한

https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html

소스

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();
    }
  • clientId 는 코그니토 설정중에 앱 클라이언트를 생성하면 거기에 ID를 발급해주는데, 그 값을 넣어준다.
  • AuthFlow 는 AWS 문서를 보고 타입을 결정해주면 된다(플젝에서 저 타입을 쓰길래..)

결과

어쨋든 이런식으로 구성을 하고 signIn 을 호출해서 토큰값을 받아보자

생성된 idToken 값으로 https://jwt.io/ 여기서 확인해보면 어떤 정보가 담겨있는지 확인하고, 유효한지 여부도 체크할 수 있다.
이렇게해서 코그니토로 올바르게 JWT 생성 완료!

profile
기록 열심히하는 개발자인척

0개의 댓글