Oauth2
What is?
- 인증을 위한 개방형 표준 프로토콜
- 다양한 플랫폼의 특정한 사용자의 데이터에 접근하기 위해 제 3자가 접근 권한을 위임받을 수 있음
Resource Owner
- 리소스의 소유자
- 리소스를 소유하고 있는 사용자
- 즉, 엔등 유저를 뜻함
Client
Authorization Server
- 리소스 소유자를 알고 있는 서버
- Client에게 액세스 토큰을 발급해주는 서버
Resource Server
Github Oauth2 인증 사용해보기
Github 설정
- Settings -> Developer settings -> Oauth Apps

- 다음에서 설정을 통해 만들 수 있다.
- 생성 시 나오는 id와 secret를 기억하자!
dependencies
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
}
Controller
package com.chan.ssb;
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MainController {
@GetMapping("/")
@ResponseBody
public String main(OAuth2AuthenticationToken token) {
System.out.println(token.getPrincipal().getAttributes());
return "Hello!";
}
}
- OAuth2AuthenticationToken token: 인증을 통해서 받아오는 토큰
config
- SpringSecOAUTH2GitHubConfig.java
package com.chan.ssb.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.oauth2.client.CommonOAuth2Provider;
import org.springframework.security.oauth2.client.registration.ClientRegistration;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SpringSecOAUTH2GitHubConfig {
@Bean
SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests((requests)->requests.anyRequest().authenticated())
.oauth2Login(Customizer.withDefaults());
return http.build();
}
@Bean
public ClientRegistrationRepository clientRepository() {
ClientRegistration clientReg = clientRegistration();
return new InMemoryClientRegistrationRepository(clientReg);
}
private ClientRegistration clientRegistration() {
return CommonOAuth2Provider.GITHUB.getBuilder("github").clientId("#####")
.clientSecret("########").build();
}
}
- oauth2Login를 이용해서 oauth2를 이용한 로그인을 활성화 한다.
- ClientRegistrationRepository는 인증 정보를 저장하는 것으로 사용하는 방식에 따라 ClientRegistration를 만들어야한다.
- CommonOAuth2Provider는 enum 방식으로 GITHUB, FACEBOOK등 다양한 정보를 제공한다.
applicattion.properties
@Bean
public ClientRegistrationRepository clientRepository() {
ClientRegistration clientReg = clientRegistration();
return new InMemoryClientRegistrationRepository(clientReg);
}
private ClientRegistration clientRegistration() {
return CommonOAuth2Provider.GITHUB.getBuilder("github").clientId("#####")
.clientSecret("########").build();
}
- 위의 코드를 applicattion.properties을 통해서 사용할 수도 있다.
- 주석 처리를 하고 다음과 같이 설정해보자
- applicattion.properties
# GitHub Oauth2
spring.security.oauth2.client.registration.github.client-id=######
spring.security.oauth2.client.registration.github.client-secret=######
확인하기
- 접속하면 다음과 같은 페이지를 출력한다.

- 인증 시 다음과 같은 정보를 볼 수 있다.
