[Start Spring Boot] Spring Security GitHub Oauth2

·2024년 4월 22일
0

Start Spring Boot!

목록 보기
48/53
post-thumbnail

Oauth2

What is?

  • 인증을 위한 개방형 표준 프로토콜
  • 다양한 플랫폼의 특정한 사용자의 데이터에 접근하기 위해 제 3자가 접근 권한을 위임받을 수 있음

Resource Owner

  • 리소스의 소유자
  • 리소스를 소유하고 있는 사용자
  • 즉, 엔등 유저를 뜻함

Client

  • 개발하려는 서비스

Authorization Server

  • 리소스 소유자를 알고 있는 서버
  • Client에게 액세스 토큰을 발급해주는 서버

Resource Server

  • 리소스를 가지고 있는 서버

Github Oauth2 인증 사용해보기

Github 설정

  • Settings -> Developer settings -> Oauth Apps
  • 다음에서 설정을 통해 만들 수 있다.
  • 생성 시 나오는 id와 secret를 기억하자!

dependencies

  • build.gradle
dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
}

Controller

  • MainController.java
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=######

확인하기

  • 접속하면 다음과 같은 페이지를 출력한다.
  • 인증 시 다음과 같은 정보를 볼 수 있다.
profile
백엔드 개발자가 꿈인 컴공과

0개의 댓글

관련 채용 정보