[게시판 프로젝트] 소셜로그인 기능 구현(1) - 카카오로 로그인 하기 - 카카오 API 사용준비/의존성/프로퍼티 설정

2024. 8. 27. 01:35웹 개발/프로젝트

인증 주체는 카카오에게 넘기되,
카카오 서비스를 통해서 로그인 한 뒤
기존 회원 테이블에 동기화 시켜서 가입시키는 방법 사용

AuditingFields 접근자 수정 - 자식에 바로 access 가능하도록 protected로 변경

  • UserAccount를 저장시킬때 AuditingFields를 직접 Access해야할 필요성
  • (ex) 회원가입 상황 - 회원 가입 직접의 이용자의 상태는 아직 가입이 안된 상태 = 즉, 인증을 하지 않은 상태
    • 인증(로그인)하지 않은 상태에서 회원 정보를 저장하려고 할때(회원 가입을 시도하려고 할때) 회원 정보가 저장이 되어야함
    • [문제]
      • Auditing Fields는 인증 정보로 부터 데이터를 가져옴 -> 따라서, createBy가 문제가 됨
      • JPAConfig를 보면, 인증정보로부터 작성자의 정보를 가져옴(getUsername)
      • 즉, 이 기능이 작동하려면 우선 인증(로그인)이 된 상태가 전제 되어야함
      • but, 회원가입을 할 때는 로그인이 되어있지 않음 -> 따라서, 이 기능을 온전히 사용할 수 없음
    • [해결] 
      • 따라서, 가능하게 하려면 첫 inserty를 할 때 우리가 직접 createdBy 나 modifiedBy를 넣어줘야함
      • 따라서, UserAccount에서 AuditingFields에 접근하려면 접근자가 protected로 열려있어야함

 

Kakao Developers에서 카카오 API 사용 준비하기 -  https://developers.kakao.com/

애플리케이션 등록하기 - 내 애플리케이션 - 애플리케이션 추가하기

 


Rest API 키 확인하기
  • 네이티브 앱 키 : 휴대폰에서 사용
  • Javascript 키 : 프론트엔드에서 인증을 통할 때  사용
  • Admin 키 : 관리자 화면에서 사용


사이트 도메인 등록하기 - 플랫폼 - Web 플랫폼 등록

  • 로컬에서 작동할 때를 고려한 도메인과 헤로쿠로 배포한 url 입력
    • 현재 기본 도메인은 로컬이지만, 이후에 배포용 도메인으로 바꿔주는 것이 좋음


Redirect URI 등록하기
 

Core Configuration :: Spring Security

If you are not able to use Spring Boot and would like to configure one of the pre-defined providers in CommonOAuth2Provider (for example, Google), apply the following configuration: OAuth2 Login Configuration @Configuration @EnableWebSecurity public class

docs.spring.io

  • 공식문서에 따른 규칙

  • 플랫폼 화면에서 등록하러 가기 클릭하거나, 메뉴 - 카카오 로그인

  • 사이트 도메인을 포함하여, Redirect URI 설정


동의항목 설정하기
  • 카카오 인증을 사용하게 되면, 카카오에서 제공해 주는 여러 회원 정보에 Access 할 수 있게 됨
  • 따라서, 우리가 서비스 운영하기 위해 받았으면 하는 정보를 동의항목 설정해 주어야함
  • 카카오계정(이메일) 권한을 부여 받기 위해서는, 비즈 앱 전환을 해 주어야함

 


Client Secret 키 확인하기

 

 


Spring Security OAuth2 Client 의존성 추가

 implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'

카카오 OAuth2 스프링 프로퍼티 설정 추가

client
  security:
    oauth2:
      client:
        registration:
          kakao:
            client-id: id
            client-secret: key
            authorization-grant-type: authorization_code
            redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
            client-authentication-method: POST
 

OAuth Grant Types

 

oauth.net

  • 기본 도메인 그대로 넣으면, 노출되어서 불안 -> 공식문서의 코드 그대로 넣으면, 스프링 부트가 알아서 도메인 정보로 치환해줌
{baseUrl}/login/oauth2/code/{registrationId}

 

  • yml 파일의 특성 상, {문자열}로 단순히 인식하지 못하기 때문에 -> 문자열 인식시켜주기 위해 의도적으로 "쌍따옴표"로 묶어줘야함
"{baseUrl}/login/oauth2/code/{registrationId}"

 

  • API를 호출할 HTTP 메서드 지정
client-authentication-method:

 

provider
        provider:
          kakao:
            authorization-uri: https://kauth.kakao.com/oauth/authorize
            token-uri: https://kauth.kakao.com/oauth/token
            user-info-uri: https://kapi.kakao.com/v2/user/me
            user-name-attribute: id
  • user-name-attribute
    • REST API를 찔러서 인증정보를 데이터 바디로 불러올 때, 그 안에 여러 프로퍼디가 들어있음
    • 그 프로퍼티 이름들 중 우리가 유저네임을 확인하기 위해 쓸 수 있는 식별자 정보가 무엇인지를 스프링 부트 프로젝트에 알려줘야함
    • 카카오의 경우에는 id로 하고 있고, 사이트에 따라 그 내용은 바뀔 수 있음
  • https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api
 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com