OAuth2란?

꾸준하게 달리기~·2023년 7월 19일
0

스프링 + 자바

목록 보기
7/20
post-thumbnail
post-custom-banner

OAuth2란?

OAuth 2는
특정 어플리케이션(내 프로젝트)에서 사용자의 인증을 직접 처리하는 것이 아니라
사용자 정보를 보유하고 있는
신뢰할 만한 써드 파티 어플리케이션 (GitHub, Google, Facebook 등)에서
사용자의 인증을 대신 처리해 주고
Resource(계정 정보, 지도 정보 등의 API를 통해 내가 사용하고자 하는 외부 데이터)에 대한
자격 증명용 토큰을 발급한 후,
어플리케이션이 해당 토큰을 이용해 써드 파티 어플리케이션의 서비스를 사용하게 해주는 인증 프로토콜이다.



나는 이전 프로젝트에서
Spring Security + OAuth2를 통한 구글 로그인을 구현했다.
제3자, 즉 정보를 제공해주는 써드파티는 구글이었다.
구글 API를 사용해 계정 정보를 받아
해당 정보로 로그인을 한 다음,
해당 로그인의 토큰을 OAuth2가 관리하고,
해당 로그인 이후 필요한 정보를
OAuth2가 관리하는토큰을 통해 얻어오는방식이다.

음.... 위의 말로는
OAuth2가 무슨 역할을 하는지 이해가 가지 않는다면,
다음 그림을 보자.

그래서 무슨 역할을 하는데?

OAuth2 적용 이전

위 사진은, OAuth2 적용 이전이다.

일정 관리 어플리케이션을 만들었고,
백엔드 서버에서는 해당 서비스 제공을 위해 구글 캘린더 API를 이용한다.

그렇게 서비스 제공을 위해 구글 캘린더 API를 사용하며,
구글에서 API를 사용하는 사용자의 크리덴셜을
내 크리덴셜 저장소에 저장해야 한다.
(크리덴셜은 사용자가 본인을 증명하는 수단)
거기에다가,
내 서비스를 이용하는 클라이언트들의 회원 인증 정보 또한
내 크리덴셜 저장소에 저장해야 한다.

이렇게 되면, 문제가 발생한다

  • 사용자에게 가장 중요한 정보인 크리덴셜이 두 개나 관리돼야 한다.
  • 어플리케이션이 구글에서 사용하는 크리덴셜을 직접적으로 가지고 있는 것도 보안상 심각한 문제이다.

즉, 보안 침해 사고라도 발생한다면 심각한 피해가 발생하기 딱 좋은 상황.

그러면 어떻게 해결할 수 있을까?
서비스는 서비스대로 구글 캘린더 API를 사용하면서,
구글 API를 위한 어플리케이션의 크리덴셜을 어플리케이션에서 직접 관리하지 않으면 된다.

이 방법이 바로 OAuth2를 사용하는 것이다.


OAuth2 적용 이후

그림에서 볼 수 있는 것처럼,
더이상 구글 인증 정보를 내 크리덴셜 저장소에 저장하지 않는다.

로그인 자체는 구글 로그인 인증을 이용하고, (로그인 인증)
구글 로그인에 성공하면 Access Token을 전달받아서 (AccessToken 전송)

Google Calendar API를 사용하기 위해
Access Token을 이용한다. (기존에는 내 저장소에 저장된 크리덴셜 사용.)

어플리케이션에 구글의 크리덴셜이 직접적으로 제공되지 않고
크리덴셜 대신 AccessToken을 OAuth2가 관리하기 때문에,
필요 없어진 크리덴셜을 내 크리덴셜저장소에 저장될 필요가 없으므로
사용자의 크리덴셜을 이중으로 관리하지 않아도 된다.
(로그인정보, 외부API정보 이중 -> 로그인정보 하나)

요약하자면,
기존에는 외부 API를 사용하기 위한 인증 정보를
내 인증 정보 저장소 (크리덴셜 저장소) 에 저장했다.
OAuth2를 적용하면, OAuth2에서
로그인 인증을 시작으로 토큰을 발급받아, 해당 토큰을 기반으로
외부 API를 사용한다.
즉, 외부 API를 위한 인증 정보가 크리덴셜 인증 정보에서 AccessToken으로 바뀌기 때문에,
더이상 필요없어진 크리덴셜 인증 정보를 저장하지 않아도 된다.

관리하는 크리덴셜(Credential)이 줄어든다는 것은 그만큼 보안성도 향상된다는 의미와 같다.

Spring

Spring에서는 여러 라이브러리를 통해,
OAuth2 인증 방식을 구현할 수 있다.
내 예시 (구글 오어스 사용, 로그인 구현): https://github.com/ingeon2/webService_project-refactoring/tree/devBE_%EC%9D%B4%EC%9D%B8%EA%B1%B4/server/src/main/java/com/main/server/global/auth/googleoauth

profile
반갑습니다~! 좋은하루 보내세요 :)
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

이 글은 정말 인상적이었습니다.

답글 달기