묠니르묘묘
꾸준히 성장하는 개발자스토리
묠니르묘묘
전체 방문자
오늘
어제
  • 분류 전체보기 (188)
    • 프로그래밍 (48)
      • 디자인패턴 (4)
      • 예외,에러 (4)
      • Java (29)
      • Kotlin (3)
      • React.js (4)
      • JavaScript (2)
      • Apache Kafka (2)
    • Spring (49)
      • Spring (21)
      • Spring Cloud (3)
      • JPA (25)
    • 코딩테스트 (31)
      • 알고리즘 (5)
      • Java - 백준 (26)
      • Java - 프로그래머스 (0)
    • AWS (7)
    • 데이터베이스 (6)
    • 개발 etc (23)
    • 도서 (5)
    • 회고록 (4)
    • 데브코스-데이터엔지니어링 (15)

인기 글

최근 글

hELLO · Designed By 정상우.
묠니르묘묘

꾸준히 성장하는 개발자스토리

스프링부트 시큐리티 - SNS 로그인과 SNS 회원가입
Spring/Spring

스프링부트 시큐리티 - SNS 로그인과 SNS 회원가입

2022. 3. 17. 11:52

https://ssdragon.tistory.com/83

 

스프링부트 시큐리티 - 일반 로그인과 회원가입

Spring Boot DevTools Lombok Spring Web Spring Data JPA H2 Database OAuth2 Client Thymeleaf 위 라이브러리들을 추가하여 스프링 시큐리티 예제를 만들어보자. implementation 'org.springframework.boot:sp..

ssdragon.tistory.com

이전 프로젝트에서 이어서 하겠다.

 

 

 

스프링 시큐리티 구글

https://console.cloud.google.com/apis/dashboard

 

Google Cloud Platform

하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.

accounts.google.com

여기에 접속해서 클라이언트 키를 만들어보자.

 

들어가서 상단 프로젝트를 눌려서 새 프로젝트를 만들어보자.

 

프로젝트 이름은 아무거나하고 만들기를 누르자.

 

필수 입력들을 입력 후 저장 후 계속 버튼을 누른다.

그 후 값을 설정하지않고 계속 버튼을 눌려서 설정을 끝마친다.

 

그리고 사용자 인증 정보에서 OAuth 클라이언트 ID를 생성하자.

 

빨간색 네모에 값을 입력하는데 마지막에 리디렉션 URI에서 저 주소는 정해진 주소이다.

http://localhost:8080/login/oauth2/code/google 에서 검은 부분만 변경이 가능하다.

 

 

이 값들을 기억하고 이제 프로젝트로 가보자.

처음 프로젝트를 만들 때 OAuth2를 설치했기때문에 바로 가면되는데 혹시 안했다면

implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'

build.gradle에 위 코드를 추가하자.

 

application.yml

yml 파일에는 다음과 같이 security 밑부분들을 추가하면 된다.

application.properties 경우에는 아래 코드를 추가한다.

spring.security.oauth2.client.registration.google.client-id = 클라이언트 ID
spring.security.oauth2.client.registration.google.client-secret = 클라이언트 시크릿 키
spring.security.oauth2.client.registration.google.scope = profile, email

 

SecurityConfig 클래스

위와 같이 수정해주자.

 

 

PrincipalOauth2UserService 클래스

/config/oauth/PrincipalOauth2UserService

@Service
public class PrincipalOauth2UserService extends DefaultOAuth2UserService {

    @Autowired
    UserRepository userRepository;

    private final BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();

    @Override
    public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
        OAuth2User oAuth2User = super.loadUser(userRequest);
        String provider = userRequest.getClientRegistration().getRegistrationId(); // google
        String providerId = oAuth2User.getAttribute("sub");
        String username = provider + "_" + providerId;
        String uuid = UUID.randomUUID().toString().substring(0, 6);
        String password = bCryptPasswordEncoder.encode("비밀번호암호화" + uuid);
        String email = oAuth2User.getAttribute("email");
        String role = "ROLE_USER";

        User userEntity = userRepository.findByUsername(username);
        if (userEntity == null) {
            userEntity = User.builder()
                    .username(username)
                    .password(password)
                    .email(email)
                    .role(role)
                    .provider(provider)
                    .providerId(providerId)
                    .build();
            userRepository.save(userEntity);
        }
        return new PrincipalDetails(userEntity, oAuth2User.getAttributes());
    }
}

이 클래스는 OAuth2 로그인 (SNS 로그인) 시 loadUserByUsername 메서드로 로그인한 유저가 DB에 있는지 확인한다.

userRequest에는 AccessToken + 사용자 프로필 정보를 받는다.

일반 로그인을 담당하는 UserDetailsService와 동일한 역할이라 보면된다.

 

이전 프로젝트에서 OAuth2 로그인을 생각하고 만들었기 때문에 이제 스프링을 시작하여 구글 회원가입이 잘 되는 것을 알 수 있다.

 

저작자표시 비영리 (새창열림)

'Spring > Spring' 카테고리의 다른 글

스프링에서 파일저장하기  (0) 2022.05.11
[Lombok] @NoArgsConstructor, @ToString  (0) 2022.04.11
스프링부트 시큐리티 - 일반 로그인과 회원가입  (0) 2022.03.17
IntelliJ 파일 업로드 주의사항  (2) 2022.03.16
Entity 보다는 DTO로 반환하자.  (0) 2022.03.16
    'Spring/Spring' 카테고리의 다른 글
    • 스프링에서 파일저장하기
    • [Lombok] @NoArgsConstructor, @ToString
    • 스프링부트 시큐리티 - 일반 로그인과 회원가입
    • IntelliJ 파일 업로드 주의사항
    묠니르묘묘
    묠니르묘묘

    티스토리툴바