이 글은 책 「스프링 부트와 AWS로 혼자 구현하는 웹 서비스」를 공부하고 정리한 글입니다.
오늘은 스프링 시큐티리와 OAuth2.0을 구현한 구글 로그인을 연동해보겠다.
막강한 인증(
Authentication
)과 인가(Authorization
)(혹은 권한 부여) 기능을 가진 프레임워크이다.
🔗 Spring Security에 대한 더 자세한 설명은 Spring Security Docs 확인
소셜 로그인을 사용하지 않고 직접 구현하는 경우 (OAuth를 사용하더라도) 다음 기능을 전부 구현해야 하기 때문이다.
OAuth 로그인 구현 시 위의 기능들을 모두 구글, 페이스북, 네이버 등에 맡기면 되므로 서비스 개발에 집중할 수 있게 된다.
🔗 구글 클라우드 플랫폼에 접속
생성 완료!
{도메인}/login/oauth2/code/{소셜서비스코드}
로 리다이렉트 URL을 지원한다.localhost
외에 추가로 주소를 추가해야 한다.생성을 완료하면 다음과 같은 창이 떠서 클라이언트 ID, 클라이언트 보안 비밀 코드를 확인할 수 있다.
src/main/resources
경로에 application-oauth.properties
파일을 추가해서 클라이언트 ID와 클라이언트 보안 비밀 코드를 추가해주자.
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
scope=profile,email
scope
의 기본값은 openid, profile, email
이다.openid
라는 scope가 있으면 Open Id Provider
로 인식하게 되는데, 이렇게 되면 OpenId Provider인 서비스
(구글)와 그렇지 않은 서비스
(네이버/카카오 등)로 나눠서 각각 OAuth2Service로 만들어야 한다.openid
를 빼고 등록한 것이다.properties
의 이름을 application-xxx.properties
로 만들면 xxx
라는 이름의 profile
이 생성되어 이를 통해 관리할 수 있다. profile=xxx
라는 식으로 호출하면 해당 properties의 설정들을 가져올 수 있게 된다.application-oauth.properties
를 포함하도록 다음 코드를 추가하자.
spring.profiles.include=oauth
🚫 클라이언트 ID와 클라이언트 보안 비밀은 외부에 노출되면 안된다!
만약 프로젝트 코드를 github에 올린다면, .gitignore
에 다음 코드를 추가해서 application-oauth.properties
파일이 올라가는 것을 막아야 한다.
application-oauth.properties
다음 시간에는 구글 로그인을 프로젝트에 적용하도록 하겠다.