OAuth 란 Open Authorization 의 약자로 인터넷 사용자가 비밀번호를 제공하지 않고도 서드파티
애플리케이션에서 다른 웹서비스에 대한 제한적인 접근 권한을 부여할수 있는 개방형 표준 인증 프로토콜 이다.
OAuth 는 사용자의 인증 정보를 안전하게 보호하면서 클라이언트가 제한된 범위에서 사용자 계정에 접근할수 있게 해준다.
자신의 데이터에 접근하려는 애플리케이션에 대한 권한을 부여하는 웹서비스의 사용자이다.
사용자의 데이터에 접근하기 위해 인증 및 권한 부여를 요청하는 애플리케이션 또는 서비스이다.
사용자의 데이터를 보유하고 있는 웹서비스이다. 사용자의 데이터에 접근을 허용하고 OAuth 인증 프로세스를 처리한다.
- 클라이언트는 사용자에게 인증을 요청하기 위해 서비스 제공자에게 리다이렉션 URL 을 생성한다.
- 사용자는 클라이언트에서 제공되는 리다이렉션 URL을 통해 서비스 제공자에게 인증 요청을 전달한다.
- 서비스 제공자는 사용자에게 로그인 화면을 제공하고 사용자는 자신의 계정 정보를 입력하여 인증한다.
- 사용자 인증에 성공하면 서비스 제공자는 클라이언트에게 인증 코드 또는 엑세스 토큰을 제공한다.
- 클라이언트는 제공받은 인증 코드 또는 엑세스 토큰을 사용하여 서비스 제공자에게 사용자의 데이터에 접근할수 있는 권한을 요청한다.
- 서비스 제공자는 클라이언트에게 사용자의 데이터에 대한 접근 권한을 부여하고 클라이언트는 해당 데이터를 사용할수 있다.
EX)
- Mong.com (클라이언트)
- 구글(서비스 제공자)
- 나(사용자)
나 는 Mong.com 서비스를 이용하려고 한다. 이때 Mong.com 에서 제공하는 구글 로그인 화면에 아이디와 비밀번호를 입력하면 Mong.com 은 내 구글 정보에 접근할수 있는 권한이 생긴다.
- implementation('org.springframework.boot:spring-boot-starter-oauth2-client'
implementation('org.springframework.boot:spring-boot-starter-oauth2-client'
OAuth2 클라이언트를 사용하기 위한 의존성을 추가해준다.
위 링크로 접속한다.
프로젝트 이름 입력후 만들기
OAuth 동의 화면 클릭후 프로젝트 선택 , User Type = 외부 , 만들기
Spring boot 공식 문서 를 보면 redirect URI 로 아래 주소를 입력하라고 한다.
application.yal 세팅 전에 프로젝트의 .gitignore 파일에 springboot gitignore 의 내용들을 추가하여 git 에 포함시키지 않을 내용에 대한 설정을 해주었다.
- *.yml
spring:
security:
oauth2:
client:
registration:
google:
client-id:
client-secret:
scope:
- email
- profile
http 에 아래 내용을 추가해준다.
.and()
.oauth2Login()
.userInfoEndpoint()
.userService(customOAuth2UserService)
.and()
.loginPage("/login")
.defaultSuccessUrl("/")
.failureUrl("/login?error")