🌱 구글 서비스에 신규 서비스를 생성해 인증 정보 발급받기
- 여기서 발급된 인증 정보 (clientId, clientSecret)를 통해서 로그인 기능과 소셜 서비스 기능을 사용
1. 구글 클라우드 플랫폼 주소로 이동 (https://console.cloud.google.com)
2. 프로젝트 선택
3. 새 프로젝트
4. 등록될 서비스의 이름 입력
- 예) freelec-springboot2-webservice
5. 왼쪽 메뉴 탭의 API 및 서비스 카테고리로 이동
6. 사용자 인증 정보
7. 사용자 인증 정보 만들기
8. 로그인은 OAuth 클라이언트 ID로 구현
9. 동의 화면 구성
- 애플리케이션 이름 : 구글 로그인 시 사용자에게 노출될 애플리케이션 이름 → freelec-springboot2-webservice
- 지원 이메일 : 사용자 동의 화면에서 노출될 이메일 주소 → 독자 이메일 사용
- Google API의 범위 : 등록할 구글 서비스에서 사용할 범위 목록 → 기본값인 email, profile, openid
10. 저장 버튼을 클릭해 OAuth 클라이언트 ID 만들기 화면으로 바로 이동
11. 프로젝트 이름 등록
12. URI 등록
- 승인된 리디렉션 URI : 서비스에서 파라미터로 인증 정보를 주었을 때 인증이 성공하면 구글에서 리다이렉트할 URL → http://localhost:8080/login/oauth2/code/google
- 스프링부트 2 버전의 시큐리티에서는 기본적으로 {도메인}/login/oauth2/code/{소셜서비스코드}로 리다이렉트 URL 지원
- 사용자가 별도로 리다이렉트 URL을 지원하는 Controller를 만들 필요가 없으며 시큐리티에서 이미 구현해 놓은 상태
13. 생성 버튼 클릭
- 사용자 인증 정보를 통해 생성된 클라이언트 정보를 볼 수 있으며 생성된 애플리케이션 클릭 시 인증 정보 확인 가능
🌱 클라이언트 ID와 클라이언트 보안 비밀코드를 프로젝트에서 설정
- clientId, clientSecret
- application-oauth 등록 : src/main/resources/ 디렉토리에 application-oauth.properties 생성
- 스프링 부트에서는 application-xxx.properties로 properties를 만들면 xxx라는 이름의 profile이 생성되어 이를 통해 관리
- 즉, profile=xxx라는 식으로 호출하면 해당 properties의 설정을 가져올 수 있음
- 해당 파일에 클라이언트 ID와 클라이언트 보안 비밀 코드를 등록
- scope의 기본값은 openid,profile,email이기 때문에 대부분 등록하지 않음
- 강제로 profile,email을 등록한 이유는 openid라는 scope가 있으면 Open Id Provider로 인식하기 때문이며,
- 이 경우 OpenId Provider인 서비스(구글)와 그렇지 않은 서비스(네이버/카카오 등)로 나눠 각 OAuth2Service를 만들어야 함
- 그리하여 하나의 OAuth2Service를 사용하기 위해 일부러 openid scope는 빼고 등록
// application-oauth.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=profile,email
- 스프링 부트의 기본 설정 파일인 application.properties에서 application-oauth.properties를 포함하도록 구성
// application.properties
spring.profiles.include=oauth
🌱 .gitnore 등록
- 구글 로그인을 위한 클라이언트 ID와 클라이언트 보안 비밀은 보안이 중요한 정보들
- 이들이 외부로 노출될 경우 언제든 개인정보를 가져갈 수 있는 취약점이 될 수 있음
- 보안을 위해 깃허브에 application-oauth.properties 파일이 올라가는 것을 방지
// .gitignore
application-oauth.properties