로그인 만들기

박찬미·2022년 2월 1일
0

스프링 시큐리티, Oauth2 클라이언트

  • 스프링 시큐리티
    인증(Authentication)과 인가(Authorization, 권한부여) 기능을 가진 프레임워크
    스프링 기반의 애플리케이션에서는 보안을 위한 표준
  • 직접 로그인 기능을 구현하는 것보다 소셜 로그인 기능을 구현하면 생기는 장점
  1. 로그인 시 보안
  2. 회원가입 시 이메일 혹은 전화번호 인증
  3. 비밀번호 찾기
  4. 비밀번호 변경
  5. 회원정보 변경
    등의 기능을 모두 구글/페이스북/네이버 등에 맡기면 된다.

원래는 스프링부트 1.5와 2.0의 연동 방법이 좀 다르지만, spring-security-oauth2-authconfigure 라이브러리로 인해 설정 방법이 비슷하다.
이 라이브러리를 이용할 경우 1.5의 설정을 2.0에서도 그대로 사용할 수 있다.

하지만, 나는 Spring Security Oauth2 Client 라이브러릴 사용할거다.

  • 이유
  1. 1.5는 신규 기능을 추가하지 않고 버그 수정 정도의 기능만 추가됨, 신규 기능은 oauth2에서 지원
  2. 스프링 부트용 라이브러리(starter) 출시
  3. 기존 방식은 확장 포인트가 적절히 오픈되어 있지 않아 직접 상속하거나 오버라이딩 해야함, 그러나 신규 라이브러리는 확장 포인트를 고려해서 설계됨

구글 서비스 등록

  1. 구글 클라우드 플랫폼 주소(https://console.cloud.google.com)에서 인증 정보 발급

생성된 프로젝트를 선택하고 API 및 서비스 카테고리로 이동

구현할 소셜 로그인은 OAuth 클라이언트 ID로 구현

바로 클라이언트 ID가 생성되기 전에 동의 화면 구성이 필요하므로 버튼 클릭

앱 이름 : 구글 로그인 시 사용자에게 노출될 애플리케이션 이름
지원 이메일 : 사용자 동의 화면에서 노출될 이메일 주소(보통은 서비스 help 이메일 주소)

Google API 범위 : 이번에 등록할 구글 서비스에서 사용할 범위 목록
기본값은 email/profile/openid이다. 이외 다른 정보들도 사용하고 싶다면 범위를 추가하면 된다.

다하고 다시

  • 승인된 리디렉션 URL
  1. 서비스에서 파라미터로 인증 정보를 주었을 때 인증이 성공하면 구글에서 리다이렉트할 URL
  2. 스프링 부트 2 버전의 시큐리티에서는 기본적으로 {도메인}/login/oauth2/code/{소셜서비스코드}로 리다이렉트 URL 지원
  3. 사용자가 별도로 리다이렉트 URL을 지원하는 Controller 만들 필요가 없다.(시큐리티에서 이미 구현)
  4. 현재는 개발 단계이므로 localhost로 구현했지만 AWS에 배포하면 주소를 추가해야 한다.


생성 완료~~
아이디와 보안 비밀이 생성된다.

이제 클라이언트 ID(clientId)와 클라이언트 보안 비밀(clientSecret) 코드를 프로젝트에서 설정하겠다.

  • application-oauth.properties 생성
    src/main/resources/ 아래에 생성

  • application.properties에 추가

spring.profiles.include=oauth

많은 예제에서 따로 scope를 등록하지 않음(원래 기본값 3개, 위 참고)
굳이 저 스코프를 넣은 이유는 openid라는 scope가 있으면 Open Id Provider로 인식하기 때문 => 그럼 OpenId Provider인 서비스(구글)와 그렇지 않은 서비스(네이버/카카오 등)로 나눠서 각각 OAuth2Service를 만들어야 함, 나누지 않으려고 openid scope를 빼고 등록한다.

스프링 부트에서는 properties의 이름을 application-xxx.properties로 만들면 xxx라는 이름의 profile이 생성되어 이걸로 관리가 가능하다.
즉, profile=xxx라는 식으로 호출하면 해당 properties의 설정들을 가져올 수 있다.
그래서 위에서는 include=oauth해서 가져왔다.

  • .gitignore 등록
application-oauth.properties

클라이언트 아이디와 클라이언트 보안 비밀은 노출되면 안되기 때문에 gitignore에 추가한다.

이렇게 등록 후에 커밋했는데 커밋 목록에 application-oauth.properties가 노출되었다.

해결방법

삭제됨 휴

0개의 댓글