일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 알고리즘 #코딩테스트 #프로그래머스 #C++ #vector #string
- 프로그래머스
- spring
- 해싱
- SpringSecurity
- SpringFramework
- kotlin
- rombok
- mustache
- JPA
- Gradle
- Java
- tdo
- 코딩테스트
- 알고리즘
- JPA autiding
- C++
- API
- springboot
- test case
- baekjoon
- SpringBean
- Comparable
- gitignore
- SpringDataJPA
- testcode
- TDD
- index.html
- DynamicProgramming
- DB
- Today
- Total
천천히, 한결같이
[Spring] 스프링 시큐리티, OAuth2를 사용해서 Google 서비스 등록하기 본문
이동욱 님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스책을 공부하며 정리한 내용입니다. 틀린 정보가 있을 수 있으니 주의하시고 댓글로 남겨주시길 바랍니다.
스프링 시큐리티와 OAuth2 클라이언트
스프링 시큐리티(Spring Security)는 스프링 기반의 애플리케이션의 보안 (인증, 권한, 인가 등)을 담당하는 하위 프레임워크 입니다. 스프링 기반 애플리케이션의 보안을 위한 표준이라고 생각하면 됩니다. 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 일일이 보안 관련 로직을 작성하지 않아도 되고 스프링 시큐리티를 통해 구현하는 것을 적극적으로 권장하고 있습니다.
OAuth2 클라이언트(Open Authorization, Open Authentication 2)는 인증을 위한 표준 프로토콜입니다. 구글, 페이스북, 카카오 등에서 제공하는 Authorization Server를 통해서 회원 정보를 인증하고 Access Token을 발급받고, 발급받은 토큰을 사용해서 로그인을 구현하게 됩니다.
만약 OAuth2를 사용하지 않고 로그인 로직을 구현한다면, 로그인 시 보안, 비밀번호 찾기 및 변경, 회원가입 시 이메일 혹은 전화번호 인증, 회원정보 변경 등의 로직을 전부 구현해야 하는데, 이렇게 되면 로그인 로직을 구현하는 데만 많은 노력이 필요하기 때문에 OAuth를 활용해서 소셜 로그인을 통한 회원가입 및 로그인을 구현하는 것이 훨씬 쉽고 유용합니다.
Google 로그인 서비스 등록
우선 구글 클라우드 플랫폼 (https://console.cloud.google.com)에서 새로운 프로젝트를 생성하고, OAuth 클라이언트 ID와 클라이언트 보안 비밀 코드를 부여받습니다. 클라이언트 ID와 클라이언트 보안 비밀 코드는 쉽게 말해서 애플리케이션의 인증 정보라고 이해하시면 됩니다. 발급받은 정보를 당연히 애플리케이션에 적용하기 위해서 spring에 등록을 해줍니다.
src/main/resources/
디렉토리에 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
scope를 따로 등록하지 않으면 scope의 기본값은 openid, profile, email이 됩니다. 하지만 openid가 있으면 Open id Provider로 인식하게 되고 이렇게 되면 OpenId Provider인 서비스(Google)과 그렇지 않은 서비스(네이버/카카오/페이스북 등)로 나눠서 각각 OAuth2Service를 만들어야 합니다. 따라서 하나의 OAuth2Service로 사용하기 위해 일부러 openid scope를 빼고 등록합니다.
스프링 부트에서는 properties
의 이름을 application-xxx.properties
로 만들면 xxx라는 이름의 profile이 생성되어 이를 통해 관리할 수 있습니다. 즉, profile=xxx라는 식으로 호출하면 해당 properties의 설정들을 가져올 수 있습니다.
application-oauth.properties
를 통해서 등록한 properties의 설정을 가져오겠습니다. application.properties
에서 application-oauth.properties
를 포함하도록 구성합니다. 아래 코드를 application.properties에 추가합니다.
spring.profiles.include=oauth
위와 같이 설정함으로써 이 설정값을 사용할 수 있게 되었습니다. 또한, application.oauth.properties
파일에 포함된 구글 로그인을 위한 클라이언트 ID와 클라이언트 보안 비밀은 보안이 중요한 정보들입니다. 외부에 노출될 경우 언제든 개인정보를 가져갈 수 있는 취약점이 될 수 있습니다. 이러한 노출을 사전에 방지하고자 (정확히 이야기하면 github에 커밋되는 것을 막고자) .gitignore에 다음과 같이 한 줄의 코드를 추가합니다.
application-oauth.properties
'Spring' 카테고리의 다른 글
[Spring] 프로젝트 생성 시 spring security 사용 후 localhost:8080/login (0) | 2022.02.27 |
---|---|
[Spring] IntelliJ exit with non-zero value 1 오류 (0) | 2022.01.18 |
[Spring] 글 등록 화면 만들기 (0) | 2022.01.02 |
[Spring] Mustache로 기본 페이지(index.html) 만들기 (0) | 2022.01.01 |
[Spring] 의존성 주입(Dependency Injection) (0) | 2021.12.31 |