다음은 구글 자동로그인 구현중에 해당하는 내용입니다.
자동 로그인 구현을 위한 application-oauth.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
맨 마지막줄 scope=profile, email
scope 의 기본값은 openId, profile, email 입니다.
강제로 profile, email 을 등록한 이유는 openId 라는 scope가 있으면 Open Id Provider 로 인식하기 때문입니다.
이렇게 되면 OpenId Provider인 서비스(구글) 과 그렇지 않은 서비스(네이버/카카오 등)로 나눠서 각각 OAuth2Service 를 만들어야한다.
하나의 OAuth2Service 로 사용하기 위해 일부러 openid scope 를 빼고 등록합니다.
깃에 git add 하기전에 .gitignore 에 application-oauth.properties 을 꼭 추가해야합니다.
그렇지 않으면 보안이 중요한 정보인 소셜 로그인을 위한 클라이언트ID 와 클라이언트 보안비밀 이들은 개인정보를 가져갈 수 있는 취약점이 될 수 있기 때문입니다.
Oauth 라이브러리를 이용한 소셜 로그인 설정 SecurityConfig 클래스
package com.book.spring.park.config.auth;
import com.book.spring.park.domain.user.Role;
import lombok.RequiredArgsConstructor;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@RequiredArgsConstructor
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final CustomOAuth2UserService customOAuth2UserService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.headers().frameOptions().disable()
.and()
.authorizeRequests()
.antMatchers("/", "/css/**", "/images/**",
"/js/**", "/h2-console/**").permitAll()
.antMatchers("/api/v1/**").hasRole(Role.USER.name())
.anyRequest().authenticated()
.and()
.logout()
.logoutSuccessUrl("/")
.and()
.oauth2Login()
.userInfoEndpoint()
.userService(customOAuth2UserService);
}
}
@EnableWebSecurity
- Spring Security 설정들을 활성화 시켜 줍니다.
csrf().disable().header().frameOptions().disable()
- h2-console 화면을 사용하기 위해 해당 옵션들을 disable 합니다.
authorizeRequests
- URL별 권한 관리를 설정하는 옵션의 시작점입니다.
antMatchers
- 권한 관리 대상을 지정하는 옵션입니다.
- URL, HTTP 메소드별로 관리가 가능합니다.
- "/"등 지정된 URL들은 permitAll() 옵션을 통해 전체 열람 권한을 주었습니다.
- "/api/v1/**" 주소를 가진 API는 USER 권한을 가진 사람만 가능하도록 했습니다.
anyRequest
- 설정된 값들 이외 나머지 URL들을 나타냅니다.
- 여기서는 authenticated()을 추가하여 나머지 URL들은 모두 인증된 사용자들에게만 허용하게 합니다.
- 인증된 사용자 즉, 로그인한 사용자들을 이야기합니다.
logout().logoutSuccessUrl("/")
- 로그아웃 기능에 대한 여러 설정의 진입점입니다.
- 로그아웃 성공 시 주소로 이동합니다.
oauth2Login
- OAuth 2 로그인 기능에 대한 여러 설정의 진입점 입니다.
userInfoEndpoint
- Oauth 2 로그인 성공 이후 사용자 정보를 가져올 때의 설정들을 담당합니다.
userService
- 소셜 로그인 성공 시 후속 조치를 진행할 UserService 인터페이스의 구현체를 등록합니다.
- 리소스 서버(즉, 소셜 서비스들)에서 사용자 정보를 가져온 상태에서 추가로 진행하고자 하는 기능을 명시할 수 있습니다.
참고 문서 - 이동욱 개발자님의 [스프링 부트와 AWS로 혼자 구현하는 웹 서비스]
스프링을 시작하시는 분들에게 꼭꼭 추천해드리고 싶습니다.
https://jojoldu.tistory.com/463
'Spring' 카테고리의 다른 글
SpringBoot build.gradle 설정 (0) | 2021.01.26 |
---|---|
스프링 트랜잭션에서 RuntimeException이 발생하면 롤백이 발생하는 이유 (2) | 2021.01.17 |
세션 저장소를 사용하는 3가지 방법 (0) | 2020.07.25 |
단위테스트 실행 콘솔에서 실행된 MySQL 쿼리 보기 (0) | 2020.07.22 |
SpringBoot 각종 Annotation (0) | 2020.07.22 |
댓글