OAuth 란?
OAuth
는 사용자 인증 및 권한 부여을 위한 개방형 표준 프로토콜이다.
사용자의 정보가 있는 리소스 서버에서 제공하는 자원에 대한 접근 권한을 관리하고, 접근 인증을 해주는 기능을 수행한다. 사용자는 이용하고자 하는 서비스 시스템에 정보 제공하지 않고, 원하는 리소스 서버의 서비스를 통해 계정 정보를 사용하여 로그인하고 인증하는 등 서비스 이용 가능하다.
OAuth 1.0
: 최초의OAuth
버전이지만, 현재 기준 사용되지 않는다.OAuth 2.0
: 가장 많이 사용되는OAuth
버전으로, 다양한 부가 기능을 제공한다.OAuth 2.1
:OAuth 2.0
의 업데이트 버전으로, 보안 및 개인 정보 보호 기능 강화되었다.
OAuth 구조
OAuth 구성
- Client : 사용자
- Resource Owner : API DB 사용자
- Resource Server : API 서버
- AUthorization Server : OAuth 인증 서버
OAuth Flow
(A) Client 가 Social Login 요청
(B) Resource Owner 는 Social Login 할 수 있게 화면 이동
(C) Client 는 Social Login 완료
(D) 로그인이 성공하면 AUthorization Server 는 Client 에게 Access Token 발급
(E) Client 는 발급받은 Token 으로 Resource Server 에게 Resource 를 요청
(D) Resource Server 는 Token 유효한지 검증하고 응답 처리
Kakao Soical Login
Token 종류
- Access Token : API 호출 권한 인증용 Token
- Refresh Token : Access Token 갱신용 Token
Kakao Developer 관리
구현 순서
RestTemplate Bean 등록
- Main Application Class 에 RestTemplate Class Bean 등록
GSON dependency 추가
Social Login 관련 설정 추가
Social Login 처리 Controller 추가
- Kakao Login 화면으로 Fowording 할 수 있는 Demo 페이지 연동 처리
- Kakao 연동 후 redirect 처리
로그인 화면
- /resource/templates/social/login.ftl
(만약 View Mapping 안된다면, Freemarker Bean 등록!)
User Entity 수정
- provoider 필드 추가
- Social Login 은 비밀번호가 필요없으므로 password 필드는 Null 허용으로 변경
User JPA Repository 수정
- Uid 와 Provider 로 회원 정보 조회하는 Method 추가
Social Login 에 필요한 Model 객체 생성
- RetKakaoAuth.java
- KakaoProfile.java
Kakao 연동 Service 생성
- Kakao Token 조회 method 구현
- Kakao profile 조회 method 구현
Social Login 연동할 REST API 추가
- Kakao 와 연동 여부 확인한 후 JWT Token 발급 처리
Security Config 관련 설정 수정
- “/social/**” API 권한 승인 처리
추가
Social Login TEST Flow
- /social/login 접속
- 소셜 로그인 요청
- 소셜 로그인 완료 후 access_token 발급
- /swagger-ui.html 접속
- /api/sign/signup/{provider} 사용자 가입
- 발급받은 Social Login access_token 필요
- /api/sign/singin 사용자 로그인하여 JWT Token 발급
- 발급받은 JWT Token 으로 API 테스트
Social Login 관련 기타 Class 및 Interface2
RestTemplate Class
- Spring 에서 지원하는 REST API 를 호출하고 응답 받을 때까지 기다리는 동기 방식의 내장 Class (비동기식은 AsyncRestTemplate.class)
- HTTP 프로토콜의 메서드들 제공