프로젝트에서 카카오 로그인 API로 간편 로그인 서비스를 구현하였으나
사실 OAuth가 무엇인지, API가 정확히 무엇인지,토큰은 또 뭔지...
아무것도 모르는 상태로 그냥 '기능 구현'만 성공 했었다(왜 돌아가는지도 모름😊)
아직도 잘은 모르지만 OAuth에 대한 생활코딩님의 강의를 듣고, 포스팅 정리를 하고 나니 조금은 동작 순서를 이해했기 때문에 어떻게 구현했는지 정리를 위해 포스팅 해보려고 한다
감자(나)를 위한 OAuth2 정리
https://record1996.tistory.com/18
[CS] OAuth2 란?
감자(나)를 위한 OAuth2 개념 정리 👀OAuth2 란? OAuth는 인증과 권한 부여를 위한 개방형 표준 프로토콜 사용자가 자신의 개인정보를 애플리케이션과 안전하게 공유 할 수 있게됨 ex) 카카오,네이버,
record1996.tistory.com
🥺2편으로 이동 (2편 끝)
https://record1996.tistory.com/25
2. SpringBoot에서 카카오 로그인 API 적용하기(DB 저장)
1편에 이어 2편에서는 본격적으로 토큰을 얻어와 사용자의 정보를 DB에 저장하려고 한다 ! 🧐1편으로 이동 https://record1996.tistory.com/24 😇순서 3. Code로 token 얻어오기 이전글의 2.사용자에게 로그인
record1996.tistory.com
😚순서
1. 카카오 애플리케이션 추가
1-1. 카카오 디벨로퍼스 사이트에 들어가서 로그인
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
1-2. 상단의 내 애플리케이션 -> 애플리케이션 추가하기
1-3. 앱이름, 사업자명 입력 후 저장 -> 애플리케이션이 생성 된 모습
1-4. 생성한 애플리케이션 클릭 -> 플랫폼 -> web 플랫폼 등록
1-5. 로컬 포트 등록(test이기 때문에 자주 사용하는 포트 임의 작성함 ! )
1-6. 카카오 로그인 -> 활성화 설정 상태 ON으로 활성화
1-7. 하단 Redirect URI 등록 클릭
1-5에서 등록했던 로컬 포트 기준으로 입력/등록
study는 springboot에 application.yml에 등록한 context-path !
1-8. 동의 항목으로 이동하여 필수 혹은 선택적으로 받을 정보를 설정
회원 가입시 닉네임등의 정보를 필수로 입력해야 한다면 필수 설정 하면 됨!
(but 필수 동의 안되는 정보들도 존재함 -> 작업을 통해 필수 동의로 바꿀수 있다고 한다)
1-9. RESP API키를 활용해야 하기 때문에 적어두기
타인에게 노출되지 않도록 주의 !
⭐카카오 로그인 API의 동작 순서 등은 해당 url을 참고
https://developers.kakao.com/docs/latest/ko/kakaologin/common
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
2. 사용자에게 로그인 요청
기본 설정 정보
- application.yml
server:
port: 80
servlet:
context-path: /study
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
password: PW
url: jdbc:mysql://localhost/DB?characterEncoding=UTF-8
username: root
jpa:
database: mysql
database-platform: org.hibernate.dialect.MySQL8Dialect
generate-ddl: false
hibernate:
ddl-auto: none
show-sql: true
mvc:
view:
suffix: .html
- gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.apache.httpcomponents:httpclient:4.5.13'
implementation 'com.google.code.gson:gson:2.8.9'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
}
2-1.Entity 생성
- user 정보 저장 할 Kakaouser Entity
@Entity
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Kakaouser {
@Id
private String userid;
private String pwd;
private String name;
private String email;
private String gender;
private String birth;
}
- KakaoRepository
@Repository
public interface KakaoRepository extends JpaRepository<Kakaouser, String>{
}
2-2. index.html 생성
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="kakaoTerms">
카카오 로그인
</a>
</body>
</html>
2-3. Controller
클라이언트 아이디라고 한글로 적은 부분에 1-9에 적어두었던 RESTAPI키를 적어준다
그리고 redirect_uri부분에는 1-7에 입력한 redirect uri를 입력한다
@Controller
public class KakaoController {
@GetMapping("kakaoTerms")
public String kakaoConnect() {
StringBuffer url = new StringBuffer();
url.append("https://kauth.kakao.com/oauth/authorize?");
url.append("client_id=" + "클라이언트 아이디");
url.append("&redirect_uri=http://localhost/study/kakao");
url.append("&response_type=code");
return "redirect:" + url.toString();
}
}
2-4. 실행 후 index.html에서 카카오 로그인을 클릭하면 사용자(나)에게 카카오 로그인을 요청하게 된다 !
'🌱 Spring' 카테고리의 다른 글
스프링(Spring Framework) 버전 별 특징 (1) | 2023.08.05 |
---|---|
2. SpringBoot에서 카카오 로그인 API 적용하기(DB 저장) (0) | 2023.08.01 |
@DynamicInsert와 @DynamicUpdate (0) | 2023.07.30 |
@ControllerAdvice로 전역 컨트롤러 만들기 (0) | 2023.07.28 |
[Spring Boot] 인터셉터(Interceptor) 란? (0) | 2023.07.26 |