지금까지 Spring Security 없이 로그인을 구현했는데, 이렇게 되니까 굉장히 보안에 취약하다는 것을 깨달아서 (chrome network창에서 payload가 투명하게 공개됨) Spring Security를 적용해보고자 한다.
그 첫번째 단계가 프론트에서 담당하던 Google 로그인을 Oauth2.0으로 백엔드 단에서 구현하는 것이다.
https://console.cloud.google.com/apis
“사용자 인증 정보” > “사용자 인증 정보 만들기” > “OAuth 클라이언트 ID” > “동의 화면 구성”
OAuth 클라이언트 ID 선택
동의 화면 구성 선택
외부 선택
이후 oauth 동의 화면에서 앱 정보, 개발자 연락처 정보를 입력한다.
그리고 “범위”에서 필요한 정보를 선택한다. 나는 사용자의 email, profile Img, nickname이 필요해서 세개를 골랐다.
그리고 테스트 사용자를 등록해야한다.
이후에 어플을 테스트 모드로 했을 때 여기에 등록한 사용자만이 구글 사용자 기능을 이용할 수 있다.
테스트에 사용할 이용자들을 추가해준다. 나는 일단 나와 회사계정 2개만 추가해주었다.
이렇게 동의 화면을 모두 만들었다! 다시 사용자 인증 정보 만들기에 들어가서 OAuth 클라이언트ID 생성을 해보자.
웹 어플리케이션을 만들 것이기 때문에 웹 어플리케이션을 선택한다.
이후 이름을 작성하고 승인된 리디렉션 URI를 추가한다.
승인된 리디렉션 URL서비스에서 파라미터로 인증 정보를 주었을 때 인증이 성공하면 구글에서 리다이렉트 할 URL이다.
스프링 부트 2 시큐리티에서는 기본적으로
{도메인}/login/oauth2/code/{소셜서비스코드}
로 리다이렉트 URL을 지원하고 있기 때문에 따로 Controller를 만들 필요없이, 시큐리티가 구현한 것을 이용하면 된다.
현재는 개발 단계라서 Localhost로 했지만, 이후 도메인도 추가해서 연결할 것이다.
이렇게 하면 Client ID와 클라이언트 보안 비밀번호를 받게 된다.
이제 두 정보를 스프링에 넣어줄 것이다!
src/main/resource 디렉토리에 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
여기서 openid라는 scope가 있으면 Open Id Provider로 인식해서 다른 서비스들의 oauth를 등록할 때 어려움이 있기 때문에 이를 빼고 기입해주었다.
또 스프링 부트에서는 properties의 이름을 application-xxx.properties로 만들면 xxx라는 이름의 profile이 생성되어 이를 통해 관리할 수 있다. 즉, profile=xxx라는 식으로 호출하면 해당 properties의 설정을 가져올 수 있다는 것이다!! 이를 위해 application.properties에서 application-oauth.properties를 포함하도록 구성한다.
spring.profiles.include=oauth
이제 구글에 모든 등록을 마쳤고 이를 스프링에도 저장해주었다.
이제 Oauth2를 활용해서 구글 로그인 화면을 구현하고, DB에 저장해보자!!!