OAuth2 소셜 로그인을 위한 변수들
application.properties
#registration spring.security.oauth2.client.registration.서비스명.client-name=서비스명 spring.security.oauth2.client.registration.서비스명.client-id=서비스에서 발급 받은 아이디 spring.security.oauth2.client.registration.서비스명.client-secret=서비스에서 발급 받은 비밀번호 spring.security.oauth2.client.registration.서비스명.redirect-uri=서비스에 등록한 우리쪽 로그인 성공 URI spring.security.oauth2.client.registration.서비스명.authorization-grant-type=authorization_code spring.security.oauth2.client.registration.서비스명.scope=리소스 서버에서 가져올 데이터 범위 #provider spring.security.oauth2.client.provider.서비스명.authorization-uri=서비스 로그인 창 주소 spring.security.oauth2.client.provider.서비스명.token-uri=토큰 발급 서버 주소 spring.security.oauth2.client.provider.서비스명.user-info-uri=사용자 정보 획득 주소 spring.security.oauth2.client.provider.서비스명.user-name-attribute=응답 데이터 변수예시
#registration spring.security.oauth2.client.registration.naver.client-name=naver spring.security.oauth2.client.registration.naver.client-id=발급아이디 spring.security.oauth2.client.registration.naver.client-secret=발급비밀번호 spring.security.oauth2.client.registration.naver.redirect-uri=http://localhost:8080/login/oauth2/code/naver spring.security.oauth2.client.registration.naver.authorization-grant-type=authorization_code spring.security.oauth2.client.registration.naver.scope=name,email #provider spring.security.oauth2.client.provider.naver.authorization-uri=https://nid.naver.com/oauth2.0/authorize spring.security.oauth2.client.provider.naver.token-uri=https://nid.naver.com/oauth2.0/token spring.security.oauth2.client.provider.naver.user-info-uri=https://openapi.naver.com/v1/nid/me spring.security.oauth2.client.provider.naver.user-name-attribute=responseregistration과 provider
registration은 외부 서비스에서 우리 서비스를 특정하기 위해 등록하는 정보여서 등록이 필수적입니다.
하지만 provider의 경우 서비스별로 정해진 값이 존재하며 OAuth2 클라이언트 의존성이 유명한 서비스의 경우 내부적으로 데이터를 가지고 있습니다.
(구글, Okta, 페이스북, 깃허브, 등등)Security Config 기본 틀
@Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http)throws Exception{ //csrf disable : stateless이기 때문에 끄기 http .csrf((auth) -> auth.disable()); //From 로그인 방식 disable http .formLogin((auth) -> auth.disable()); //HTTP Basic 인증 방식 disable http .httpBasic((auth) -> auth.disable()); //oauth2(커스텀 꺼둔상태=Deafault) http .oauth2Login(Customizer.withDefaults()); //경로별 인가 작업 http //기본경로 "/" 제외한 나머지는 로그인해야만 사용가능 .authorizeHttpRequests((auth) -> auth .requestMatchers("/").permitAll() .anyRequest().authenticated()); //세션 설정 : STATELESS (JWT로 인증 인가 사용할 것이므로) http .sessionManagement((session) -> session .sessionCreationPolicy(SessionCreationPolicy.STATELESS)); return http.build(); } }네이버와 구글의 yml설정
네이버 : 개발자 유미 노션
구글 : 개발자 유미 노션
application.ymlspring: security: oauth2: client: registration: naver: client-name: naver client-id: client-secret: redirect-uri: http://localhost:8080/login/oauth2/code/naver authorization-grant-type: authorization_code scope: name,email google: client-name: google client-id: client-secret: redirect-uri: http://localhost:8080/login/oauth2/code/google authorization-grant-type: authorization_code scope: profile,email provider: naver: authorization-uri: https://nid.naver.com/oauth2.0/authorize token-uri: https://nid.naver.com/oauth2.0/token user-info-uri: https://openapi.naver.com/v1/nid/me user-name-attribute: response