- 구글 console에서 OAuth 2.0 클라이언트 ID 생성
- security.oauth2.client.client-id, security.oauth2.client.client-secret 설정
- security.oauth2.client.registered-redirect-uri 설정
- security.oauth2.client.scope 설정
https://console.cloud.google.com/apis/credentials/oauthclient
- Login with Google 클릭
- 구글 로그인 페이지로 이동
- 구글 로그인 성공
- 구글에서 /login/oauth2/code/google 로 리다이렉트
- /login/oauth2/code/google 로 리다이렉트 되면서 구글에서 전달한 code를 파라미터로 전달
- /login/oauth2/code/google 에서 code를 받아서 구글에 access token 요청
- 구글에서 access token을 전달
- /login/oauth2/code/google 에서 access token을 받아서 구글에 user info 요청
- 구글에서 user info를 전달
- /login/oauth2/code/google 에서 user info를 받아서 로그인 처리
https://wildeveloperetrain.tistory.com/252
- 로그인 성공 이후 임의의 페이지로 넘기고 싶다면 CustomAuthenticationSuccessHandler 만들어 주입
- 시큐리티는 /login/oauth2/code/{registrationId} 패턴의 URL을 OAuth2 로그인 요청으로 인식한다.
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests((authorizeRequests) ->
authorizeRequests
.requestMatchers("/", "/login", "/oauth/**").permitAll()
.anyRequest().authenticated()
)
.formLogin((formLogin) ->
formLogin
.loginPage("/login")
.permitAll()
)
.oauth2Login((oauth2Login) ->
oauth2Login
// 원래는 지정할 수 있어야 하지만 안됨!
// 시큐리티는 /login/oauth2/code/{registrationId} 패턴의 URL을 OAuth2 로그인 요청으로 인식한다.
// default :http://localhost:8080/login/oauth2/code/google
// .authorizationEndpoint((authorizationEndpoint) ->
// authorizationEndpoint
// .baseUri("/login/oauth2/code/mygoogle")
// )
.loginPage("/login")
.userInfoEndpoint(userInfoEndpoint ->
userInfoEndpoint
.userService(oauthUserService)
).successHandler(new CustomAuthenticationSuccessHandler())
)
.requestCache((requestCache) ->
requestCache.requestCache(new NullRequestCache())
);
return http.build();
}