https://console.cloud.google.com/
Google 클라우드 플랫폼
로그인 Google 클라우드 플랫폼으로 이동
accounts.google.com
구글 콘솔로 가서 새 프로젝트를 만든다.
구글 로그인을 하게 되면 구글에서 우리 페이지로 인증 코드를 넘겨준다. 이 코드를 가지고 액세스 토큰을 구글에 요청한다. 그리고 액세스 토큰을 받아서 사용자 대신 우리가 구글로부터 사용자의 정보에 접근할 수 있는 권한이 생긴다.
액세스 토큰을 얻기 위한 인증 코드를 받을 주소가 리디렉션 URI이다.
스프링 시큐리티에서 /login/oauth2/code는 고정된 값이다. (OAuthClient 라이브러리)
생성이 완료되면 클라이언트 ID와 클라이언트 보안 비밀번호가 나온다. 비밀번호는 노출되면 안 된다. 이 ID와 비밀번호를 application.properties에서 사용해야 한다.
의존성 추가
build.gradle
implementation('org.springframework.boot:spring-boot-starter-oauth2-client')
application.properties
spring.security.oauth2.client.registration.google.client-id=클라이언트 ID
spring.security.oauth2.client.registration.google.client-secret=클라이언트 보안 비밀번호
spring.security.oauth2.client.registration.google.scope=email,profile
만약 깃허브에 올릴거라면 노출이 되면 안되니 위 코드는 별도 프로필을 만들어 그 properties파일을 .gitignore에 추가해야 한다.
나는 application-oauth.properties를 만들고 application.properties에
# 깃허브에 올라가지 않게 oauth 프로필로 만듦
spring.profiles.include=oauth
이렇게 oauth 프로필을 include했다.
scope는 OAuth 동의 화면에서 볼 수 있고
여기서도 볼 수 있다.
https://developers.google.com/identity/protocols/oauth2/scopes?hl=ko&authuser=1
Google API의 OAuth 2.0 범위 | Authorization | Google Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 의견 보내기 Google API의 OAuth 2.0 범위 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이
developers.google.com
loginForm.html
...
</form>
<a href="/oauth2/authorization/google">구글 로그인</a>
<a href="/joinForm">회원가입을 아직 하지 않으셨나요?</a>
</body>
</html>
구글 로그인 주소도 정해진 값이다. /oauth2/authorization
구글 로그인을 클릭해보면
404가 뜨는 이유는 아직 매핑을 하지 않아서이다.
SecurityConfig
.formLogin().loginPage("/loginForm")
.loginProcessingUrl("/login")
.defaultSuccessUrl("/")
.and()
.oauth2Login()
.loginPage("/loginForm");
return http.build();
}
이제 구글 로그인을 클릭하면
그런데
/manager로 접속하면 로그인 페이지로 오게 된다.
여기서 구글 로그인을 하면
403 에러가 뜬다. 이것은 구글 로그인이 완료된 후 후처리가 필요한데, 그 작업을 하지 않았기 때문이다.
- 코드를 받은 후(인증) 이를 통해
- 액세스 토큰(권한)을 발급받는다.
- 이제 우리 서비스가 구글 로그인한 사용자의 정보에 접근할 수 있게 된다.
- 그러면 사용자 프로필 정보를 가져올 수 있고
- 가져온 정보를 토대로 작업을 할 수 있다.
- 회원가입을 자동으로 진행
- 가져온 정보 외에 추가적인 정보(쇼핑몰의 경우 주소 등)가 필요하다면 추가적인 회원가입 창을 통해 회원가입을 진행
구글 로그인이 완료되면 코드를 받는 것이 아니라 액세스 토큰과 사용자 프로필 정보를 함께 받게 된다.
'Spring Security' 카테고리의 다른 글
[OAuth] Authentication객체가 가질 수 있는 2가지 타입 (0) | 2023.03.26 |
---|---|
[OAuth] 구글 회원 프로필 정보 받아보기 (0) | 2023.03.26 |
[기본] 시큐리티 권한처리 (0) | 2023.03.25 |
[기본] 시큐리티 로그인 (0) | 2023.03.25 |
[기본] 시큐리티 회원가입 (0) | 2023.03.25 |