Google OAuth2 인증 방식 이해하기
목차 Spring Security OAuth2 - Handler Spring Security OAuth2 - Login 페이지 Customizing 하기 Spring Security OAuth2를 이용한 로그인 구현 - 사용자 정보 가져오기 Spring Security OAuth2를 이용한 로그인 구현 - Spring boot OAuth2 인증 살펴보기 Spring Security OAuth2를 이용한 로그인 구현 - OAuth2를 이용한 인증 사용하기 Google OAuth2 인증 방식 이해하기 OAuth2를 이용한 로그인 구현 이해하기 Google Oauth2 인증 시나리오 살펴보기 Web Server가 Google에 Access Token 을 요청한다. 사용자가 구글 ID와 Password를 이용해 로그인을 한다. Web Server쪽으로 Authorization code 가 반환된다. Authorization code를 이용해 Access Token을 요청 구글에서 Access Token값을 반환한다. Access Token을 이용해 사용자의 profile과 같은 정보들을 가져온다. 스프링에서 기본적으로 제공하는 OAuth2Provider https://docs.aws.amazon.com/ko_kr/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-verifying-a-jwt.html Google, Facebook, Github 등을 통해 OAuth2인증하기 위한 기본적인 설정값들이 들어가 있다. authorizationUri 인증을 진행하기 위해 사용하는 URI tokenUri Resource server 로부터 Access token 을 받기 위해 사용하는 URI jwkSetUri Google로 부터 받은 JWT(JSON Web Token) 의 유효성을 확인할 수 있는 Public key(JSON Web Key) 를 받을 수 있는 URI userInfoUri Resource Server (ex. Google) 로부터 사용자 정보를 가져오기 위한 URI userNameAttributeName Resource server 가 제공하는 id값 clientName Resource Server 이름 (client Name을 사용할 때도 있다.) public enum CommonOAuth2Provider { GOOGLE { @Override public Builder getBuilder(String registrationId) { ClientRegistration.Builder builder = getBuilder(registrationId, ClientAuthenticationMethod.BASIC, DEFAULT_REDIRECT_URL); builder.scope("openid", "profile", "email"); builder.authorizationUri("https://accounts.google.com/o/oauth2/v2/auth"); builder.tokenUri("https://www.googleapis.com/oauth2/v4/token"); builder.jwkSetUri("https://www.googleapis.com/oauth2/v3/certs"); builder.issuerUri("https://accounts.google.com"); builder.userInfoUri("https://www.googleapis.com/oauth2/v3/userinfo"); builder.userNameAttributeName(IdTokenClaimNames.SUB); builder.clientName("Google"); return builder; } }, ... private static final String DEFAULT_REDIRECT_URL = "{baseUrl}/{action}/oauth2/code/{registrationId}"; protected final ClientRegistration.Builder getBuilder(String registrationId, ClientAuthenticationMethod method, String redirectUri) { ClientRegistration.Builder builder = ClientRegistration.withRegistrationId(registrationId); builder.clientAuthenticationMethod(method); builder.authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE); builder.redirectUri(redirectUri); return builder; }}