2024.01.14 - [Spring Boot] - [Spring Boot] 로그인 기능 구현 (5) - 구글 로그인 (OAuth 2.0)
- 지난 게시글에서 구글 로그인을 다룸
- 이번에는 카카오 로그인을 다루는데 지난 게시글의 코드를 수정/추가하는 형식으로 진행함
1. OAuth 사용 카카오 로그인 구현
1-1. 애플리케이션 추가하기
- 카카오 개발자 사이트 (https://developers.kakao.com/) 접속
- 내 애플리케이션 > 애플리케이션 추가하기
- 앱 아이콘 : 원하는 이미지 업로드
- 앱 이름 : OAuth
- 사업자명 : 공대생안씨
- 카테고리 : 소셜 네트워킹
- 대시보드의 보안탭
- Client Secret > 코드 생성 > 생성
- 활성화 상태 > 설정 > 사용함 > 저장
- 대시보드의 카카오 로그인 탭
- 활성화 설정 > 상태 : ON
- Redirect URI 등록 > http://localhost:8080/login/oauth2/code/kakao 저장
- 대시보드의 플랫폼 탭 > Web 플랫폼 등록
- 사이트 도메인 : http://localhost:8080
- 저장
- 대시보드의 동의항목 탭
- 카카오계정(이메일)을 사용하기 위해 개인정보 동의항목 심사 신청 클릭 (이메일을 사용하지 않는다면 건너뛰기)
- 비즈 앱 전환 > 개인 개발자 비즈 앱 전환
- 비즈 앱 전환 목적 : 이메일 필수 동의
- 전환 클릭
- 다시 동의항목 탭으로 돌아가면 카카오계정 (이메일) 이 활성화 되어 있음
- 닉네임, 카카오계정(이메일) 상태 설정
- 동의 단계 : 필수 동의
- 동의 목적 : 원하는 대로 작성
- 저장 (닉네임과 이메일 모두 저장)
1-2. application.yml 수정
# application.yml에 아래 설정 추가
spring:
security:
oauth2:
client:
registration:
kakao:
client-id: [요약 정보 탭 > 앱 키 에서 확인 가능한 REST API 키]
client-secret: [보안 탭에서 확인 가능한 Client Secret 코드]
scope:
- account_email
- profile_nickname
authorization-grant-type: authorization_code
redirect-uri: http://localhost:8080/login/oauth2/code/kakao
client-name: Kakao
client-authentication-method: client_secret_post
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
1-3. KakaoUserDetails 추가
@AllArgsConstructor
public class KakaoUserDetails implements OAuth2UserInfo {
private Map<String, Object> attributes;
@Override
public String getProvider() {
return "kakao";
}
@Override
public String getProviderId() {
return attributes.get("id").toString();
}
@Override
public String getEmail() {
return (String) ((Map) attributes.get("kakao_account")).get("email");
}
@Override
public String getName() {
return (String) ((Map) attributes.get("properties")).get("nickname");
}
}
1-4. CustomOauth2UserService 수정
// 기존의 코드 중 if(provider.equals("google"))의 밑에 아래 코드 추가
else if (provider.equals("kakao")) {
log.info("카카오 로그인");
oAuth2UserInfo = new KakaoUserDetails(oAuth2User.getAttributes());
}
log.info() 로 찍어본 attributes
더보기
getAttributes :
{id=3285702311,
connected_at=2024-01-14T07:56:54Z,
properties={nickname=안창민},
kakao_account={profile_nickname_needs_agreement=false,
profile={nickname=안창민},
has_email=true, email_needs_agreement=false, is_email_valid=true, is_email_verified=true,
email=chm2006@naver.com}}
이러한 attributes의 구조를 바탕으로 KakaoUserDetails 에서 값을 추출함
1-5. login.html 수정
- a href 태그 추가하여 카카오 로그인 가능하게 수정
<a href="/oauth2/authorization/kakao">카카오 로그인</a>
2. 실행 결과
2-1. 로그인 화면
- 카카오 로그인 항목이 추가됨
2-2. 카카오 로그인 클릭 시
- 카카오 로그인 기능 확인
2-3. 카카오 로그인 이후 마이페이지
- ID : "provider(kakao)"_"providerId" 형태
2-4. MySQL에서 확인
'Spring Boot' 카테고리의 다른 글
[Spring Boot] 로그인 기능 구현 (8) - 페이스북 로그인 (OAuth 2.0) (0) | 2024.01.14 |
---|---|
[Spring Boot] 로그인 기능 구현 (7) - 네이버 로그인 (OAuth 2.0) (1) | 2024.01.14 |
[Spring Boot] 로그인 기능 구현 (5) - 구글 로그인 (OAuth 2.0) (0) | 2024.01.14 |
[Spring Boot] 로그인 기능 구현 (4) - 스프링 시큐리티 사용 JWT 로그인 (1) | 2024.01.13 |
[Spring Boot] 스프링으로 엑셀 파일 읽기 (1) | 2024.01.08 |