목차
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; }}