리디렉션 URI :
。권한승인부여코드 과정 상 OAuth Client ( = 백엔드 )에서 권한승인부여코드를 송신하는 OAuth Provider( = Authorization Server )의 URI
。Spring에서 application.yml에 정의
리디렉션 URI 양식 :
"{baseUrl}/{action}/oauth2/code/{registrationId}"\
▶ baseUrl : 현재 백엔드 서버 URL ( ex. http://localhost:8080 )
▶ action : OAuth 동작 경로 ( login / logout 여부 )
▶ registrationId : OAuth Provider ID ( ex. google, kakao, ... etc )
구글 GCP에 등록할 Redirection URI :
▶ "http://localhost:8080/login/oauth2/code/google"
카카오에 등록할 Redirection URI :
▶ "http://localhost:8080/login/oauth2/code/kakao"
네이버에 등록할 Redirection URI
▶ "http://localhost:8080/login/oauth2/code/naver"
OAuth2 Client
。Spring Application이 OAuth 2.0 클라이언트 역할을 수행할 수 있도록 지원하는 Spring Boot Starter
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
OAuth2 사용 시 yml 파일 설정
。 다음 내용 정의 이후 Auto Configuration에 의해 Spring Bean으로서 설정정보 등록
spring:
security:
oauth2:
client:
registration:
kakao:
client-id: ${인증서버 ClientID}
client-secret: ${인증서버 Client Secret Key}
authorization-grant-type: authorization_code
client-authentication-method: client_secret_post
redirect-uri: "{baseUrl}/{action}/oauth2/code/{registrationId}"
scope:
- 자원명1
- 자원명2
...
provider:
kakao:
authorization-uri: OAuth Provider 로그인 페이지 URI
user-name-attribute: id
token-uri: OAuth Provider Access Token 획득 URI
user-info-uri: OAuth Provider 사용자 정보 획득 URI
spring: security: oauth2: client:
。Spring Security OAuth2 Client 설정 시작 경로
▶ OAuth 로그인을 위해 OAuth Provider( ex. google )에 전달할 OAuth Client(= 백엔드) 정보 정의
registration: OAuthProvider명 :
。각 OAuth Provider( ex. google , kakao, ... etc )에 전달할 OAuth Client 정보를 정의
▶ "우리 서비스가 OAuth 서버에 어떻게 로그인 요청을 보낼 것인가?"
。내부적으로 registrationId = "OAuthProvider명"으로 설정
▶ redirect URI가 /login/oauth2/code/OAuthProvider명로 동적으로 지정
。 client: provider 별로 복수 등록 가능
client-id :
。OAuth Provider에서 식별 용도로 발급한 Client ID를 정의
▶ OAuth Provider는 client-id를 통해 어떤 어플리케이션에서 로그인 요청했는지 식별
client-secret :
。OAuth Provider에서 제공한 Client Secret Key 입력
authorization-grant-type: authorization_code
。OAuth 인증 방식을 결정
▶ OAuth Client에서 권한 획득 시 권한부여승인코드 방식으로 획득하도록 설정
client-authentication-method: client_secret_post
。Access Token 요청 시 client_id, client_secret_key의 전달 방식을 결정
▶ HTTP Message Body에 포함해서 전송하도록 설정
redirect-uri: "{baseUrl}/{action}/oauth2/code/{registrationId}"
。 권한승인부여코드를 송신할 OAuth Provider URI
scope: 권한명
。OAuth Resource Server에게 요청할 사용자 정보 권한 범위 지정
provider: OAuthProvider명
。Spring에게 전달할 OAuth Provider 정보를 지정
。Spring에서 기본적으로 google은 provider로 등록되었음으로 정의할 필요가 없다.
▶ 단. kakao 처럼 Spring OAuth에 등록된 서비스가 아닌 경우 provider의 경우도 기입해야한다.
authorization-uri
。Resource Owner( = 사용자 )가 로그인 시 OAuth Provider의 로그인 페이지로 전송하는 OAuth Provider URI를 지정
token-uri :
。OAuth Client가 Access Token을 요청하기 위해 권한부여승인코드를 전송하는 OAuth Provider URI를 지정
user-info-uri :
。OAuth Client가 Resource Server에서 사용자 정보를 요청하기위해 Access Token를 전송하는 OAuth Provider URI를 지정
user-name-attribute: 고유 식별자
。OAuth 사용자 식별용 Key 지정
Spring Security에서 필터체인에 OAuth 인증 활성화
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http){
return http
.oauth2Login(Customizer.withDefaults())
.build();
}
}
HTTPSecurity객체.oauth2Login(Customizer.withDefaults())
。Spring Security에서 Oauth 2.0 로그인 기능을 활성화하는 메서드

▶ 다음 설정을 끝낸 후 localhost:8080/login 접속 시 해당 API를 보호하기위해 application.yml에 등록된 OAuth2 Provider ( ex. Google 등 )에 의해 로그인 옵션이 자동으로 표시됨.
。localhost:8080/logout 접속 시 로그아웃을 수행.