스프링 OAuth2 클라이언트 세션 15 : OAuth2AuthorizedClientService
·
Spring Security/OAuth2
OAuth2AuthorizedClientServiceOAuth2 소셜 로그인을 진행하는 사용자에 대해 우리의 서버는 인증 서버에서 발급 받은 Access 토큰과 같은 정보를 담을 저장소가 필요하다. 기본적으로 인메모리 방식으로 관리되는데 소셜 로그인 사용자 수가 증가하고 서버의 스케일 아웃 문제로 인해 인메모리 방식은 실무에서 사용하지 않는다. 따라서 DB에 해당 정보를 저장하기 위해서는 OAuth2AuthorizedClientService를 직접 작성해야 한다.JDBC 의존성 추가JDBC 방식을 지원하기 때문에 JDBC 모듈이 필요하고 JPA를 사용하고 싶은 경우 전부 커스텀해서 만들어야 한다. build.gradledependencies { implementation 'org.springfram..
스프링 OAuth2 클라이언트 세션 14 : OAuth2LoginAuthenticationFilter
·
Spring Security/OAuth2
로그인 성공 redirect_uri 필터 : /login/oauth2/code/서비스명 OAuth2LoginAuthenticationFilter는 인증 서버에서 로그인을 성공한 뒤 우리 서버측으로 발급되는 CODE를 획득하고, CODE를 통해 Access 토큰과 User 정보를 획득하는 OAuth2LoginAuthenticationProvider를 호출하는 일련의 과정을 시작하는 필터이다. OAuth2LoginAuthenticationFilterOAuth2LoginAuthenticationFilter는 /login/oauth2/code/서비스명 경로에 대해서 CODE를 받는 필터이다.이후 검증을 진행하고 완료되면 OAuth2LoginAuthenticationProvide를 호출한다.public class..
스프링 OAuth2 클라이언트 세션 13 : OAuth2AuthorizationRequestRedirectFilter
·
Spring Security/OAuth2
로그인 페이지에서 : /oauth2/authorization/서비스로그인 페이지에서 GET : /oauth2/authorization/서비스 경로로 요청을 할 경우 OAuth2 의존성에 의해 OAuth2AuthorizationRequestRedirectFilter에서 해당 요청을 받고 내부 프로세서를 진행한다. OAuth2AuthorizationRequestRedirectFilter는 요청을 받은 후 해당하는 서비스의 로그인 URI로 요청을 리디렉션 시킨다. (이때 서비스의 정보는 지난 번에 등록한 ClientRegistrationRepository에서 가져온다.)OAuth2AuthorizationRequestRedirectFilterOAuth2AuthorizationRequestRedirectFilte..
스프링 OAuth2 클라이언트 세션 12 : ClientRegistration
·
Spring Security/OAuth2
자료ClientRegistrationhttps://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/oauth2/client/registration/ClientRegistration.htmlClientRegistrationRepositoryhttps://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/oauth2/client/registration/ClientRegistrationRepository.htmlOAuth2 서비스 변수 등록 방법기존에 application.properties 변수 설정 파일에서 설정했..
스프링 OAuth2 클라이언트 세션 11 : 커스텀 로그인 페이지
·
Spring Security/OAuth2
기본 OAuth2 로그인 페이지GET : /login커스텀 로그인 페이지 설정login.mustachelogin pagenaver logingoogle login controller > LoginController@Controllerpublic class LoginController { @GetMapping("/login") public String loginPage() { return "login"; }}SecurityConfig OAuth2 커스텀 로그인 페이지 등록config > SecurityConfighttp .oauth2Login((oauth2) -> oauth2 .loginPage("/login") .userInfoEndpoint..
스프링 OAuth2 클라이언트 세션 : 로그인 및 DB 저장 테스트
·
Spring Security/OAuth2
테스트# JPA 및 Hibernate 설정spring.jpa.hibernate.ddl-auto=createspring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImplddl-auto 설정을 create로 바꾼 후 프로젝트 실행UserEntity 테이블이 만들어짐.로그인 페이지로 이동.네이버로 로그인 구글 로그인해당 두 서비스로 로그인이 잘 됐고, UserEntity에 데이터가 잘 들어왔다.
스프링 OAuth2 클라이언트 세션 10 : 유저 정보 DB 저장
·
Spring Security/OAuth2
DB 관련 의존성 주석 해제build.gradledependencies { //implementation 'org.springframework.boot:spring-boot-starter-data-jpa' //runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'}DB 연결 변수 작성application.properties# DB 설정spring.datasource.driver-class-name=org.mariadb.jdbc.Driverspring.datasource.url=jdbc:mariadb://localhost:3306/oauth2spring.datasource.username=rootspring.datasource.password=!123456sp..
스프링 OAuth2 클라이언트 세션 9 : 응답 데이터로 로그인 완료
·
Spring Security/OAuth2
CustomOAuth2UserService 이어서 작성@Servicepublic class CustomOAuth2UserService extends DefaultOAuth2UserService { //DefaultOAuth2UserService OAuth2UserService의 구현체 @Override public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException { OAuth2User oAuth2User = super.loadUser(userRequest); System.out.println(oAuth2User.getAttributes()); ..
스프링 OAuth2 클라이언트 세션 8 : OAuth2UserService 응답 받기
·
Spring Security/OAuth2
OAuth2UserServiceCustomOAuth2UserService@Servicepublic class CustomOAuth2UserService extends DefaultOAuth2UserService { //DefaultOAuth2UserService OAuth2UserService의 구현체 @Override public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException { OAuth2User oAuth2User = super.loadUser(userRequest); System.out.println(oAuth2User.getAttributes()..
스프링 OAuth2 클라이언트 세션 7 : 구글 소셜 로그인 신청
·
Spring Security/OAuth2
구글 GCP(aws와 같이 구글에서 제공하는 클라우드 서비스)https://cloud.google.com/free/?utm_source=google&utm_medium=cpc&utm_campaign=japac-KR-all-en-dr-BKWS-all-core-trial-EXA-dr-1605216&utm_content=text-ad-none-none-DEV_c-CRE_668690472449-ADGP_Hybrid+ https://cloud.google.com/free/?utm_campaign=japac-KR-all-en-dr-BKWS-all-core-trial-EXA-dr-1605216&utm_content=text-ad-none-none-DEV_c-CRE_668690472449-ADGP_Hybrid+&utm..