https://ssdragon.tistory.com/83
이전 프로젝트에서 이어서 하겠다.
스프링 시큐리티 구글
https://console.cloud.google.com/apis/dashboard
여기에 접속해서 클라이언트 키를 만들어보자.
들어가서 상단 프로젝트를 눌려서 새 프로젝트를 만들어보자.
프로젝트 이름은 아무거나하고 만들기를 누르자.
필수 입력들을 입력 후 저장 후 계속 버튼을 누른다.
그 후 값을 설정하지않고 계속 버튼을 눌려서 설정을 끝마친다.
그리고 사용자 인증 정보에서 OAuth 클라이언트 ID를 생성하자.
빨간색 네모에 값을 입력하는데 마지막에 리디렉션 URI에서 저 주소는 정해진 주소이다.
http://localhost:8080/login/oauth2/code/google 에서 검은 부분만 변경이 가능하다.
이 값들을 기억하고 이제 프로젝트로 가보자.
처음 프로젝트를 만들 때 OAuth2를 설치했기때문에 바로 가면되는데 혹시 안했다면
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
build.gradle에 위 코드를 추가하자.
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 |