안녕하세요 코드짜는헬창입니다.
카카오 로그인 연동중 OAuth 개념이 궁금하여 찾던중 이해가 잘되는 글이 있어 포스팅 했습니다~!
도움 되시길 바랍니다.
참조 : https://baked-corn.tistory.com/29
OAuth2.0
안녕하세요. 오늘은 우리가 여러 웹서비스들을 이용할 때 자주 사용되는 요소 중 하나인 OAuth2.0에 대해 살펴보는 시간을 갖도록 하겠습니다.
OAuth2.0이란 각종 웹, 모바일 어플리케이션에서 타사의 API를 사용하고 싶을 때 권한 획득을 위한 프로토콜(Protocol)입니다.
간단하게는 로그인에서부터 각종 API를 보다 안전하고 편하게 사용하게 해줍니다.
여러분은 많은 웹 서비스와 모바일 어플리케이션을 이용하면서 다음과 같은 문구를 많이 보셨습니다.
“facebook으로 로그인”, “Google 계정으로 로그인”, “Naver로 로그인”
이러한 기능으로 여러분은 특정 서비스에 대한 회원가입 과정을 거치지 않고 기존에 사용하던 서비스들의 계정으로 로그인을 진행할 수 있습니다. 이것이 OAuth2.0의 장점 중 하나입니다.
간단하게 과정을 살펴본다면 위의 버튼들을 클릭하여 로그인을 진행하다보면 타사 서비스(Google, facebook)에 로그인이 되어있지 않다면 먼저 로그인을 요구하는 입력창이 나올 것이고, 로그인을 한 후에는 권환 획득에 관한 수락을 요구하는 창이 뜰 것입니다. 이러한 과정들을 거쳐 여러분은 로그인에 성공하게 됩니다.
이번 포스팅에선 이러한 과정들을 보다 상세히 살펴보는 시간을 갖도록 하겠습니다.
OAuth2.0의 장점
-
위에서 언급했듯이 이용하려는 서비스마다 회원가입을 할 필요없이 기존의 사용하던 타사의 정보를 이용하여 로그인을 진행할 수 있습니다.
-
타사의 정보를 통해 특정 사이트를 이용한다는 것은 매우 위험할 수 있으나 직접 타사의 아이디와 비밀번호를 입력하던 예전 방식보다 안전한 사용을 제공합니다.
- 정보는 회원 정보뿐만 아니라 기타 API에 대한 정보에도 접근이 가능합니다.
이렇게 사용자들이 타사에서 사용하고 있는 서비스들에 대한 정보를 가져와 가공하여 보다 가치있는 결과물을 사용자들에게 제공할 수 있습니다. 가장 많이 이용되는 곳이 바로 타사의 인증된 회원정보를 통한 로그인입니다.
Authentication vs Authorization
- Authentication : 인증
- Authorization : 허가
일반 로그인은 회원가입할 때 사용했던 아이디와 비밀번호를 통한 인증(Authentication)이라면 OAuth2.0은 타사 서비스(Google, facebook)의 이메일 정보에 우리가 만든 서비스의 접근을 허락(Authorization)하여 사용자를 인증(Authentication)합니다.
OAuth2.0을 통한 Authorization 과정
먼저 우리는 용어들을 정리할 필요가 있습니다.
용어의미
Client | 사용자가 사용하려는 우리가 만든 서비스. |
Resource Server | 서비스에 자신의 API를 제공하는 타사 서비스. |
Resource Owner | 타사 서비스 API의 정보의 주인, 즉 우리가 만든 서비스를 타사 서비스를 통해 이용하려는 사용자. |
다음으로는 과정을 살펴보도록 하겠습니다.
-
먼저 우리가 만든 Client가 Resource Server의 API를 사용하다고 Resource Server에 등록을 해야합니다. (Facebook Login, Google Calendar etc.)
그렇다면 위와 같이 Resource Server는 이 Client를 식별할 수 있는 Client ID와 Client Secret을 발급합니다
-
이 후 Resource Owner가 우리가 만든 Client에서 Google 계정으로 로그인을 통해 로그인을 요청합니다.
-
Client는 Resource Owner에게 Resource Server의 로그인 창을 띄어줍니다.
-
Resource Owner는 Client가 Resource Server에 있는 자신의 정보에 접근에 대한 동의를 구하는 창을 보고 동의를 하게 됩니다.
즉 해당 서비스가 사용자의 facebook 로그인 정보, Google 로그인 정보에 대해 접근을 허락하는지 안하는지에 대해 결정하는 과정입니다. 이 과정에서 수락을 하지 않는다면 정보가 제공되지 않기 때문에 로그인은 할 수 없습니다.
-
만일 Resource Owner가 Client에게 Resource Server에 있는 자신의 정보에 접근을 허락하면 Resource Server는 Client에게 일련의 암호화된 코드를 제공하고 이 코드와 함께 해당 정보의 사용 등록을 했는지의 여부를 판단하는 Client ID와 Client Secret을 함께 보내 모든 것이 일치한다면 최종 접근 권한 부여의 암호인 Access Token을 발급하게 됩니다
마무리
이러한 Authorization의 과정을 걸쳐 Client는 Resource Server의 특정 정보에 대한 접근 권한을 얻게 되어 해당 정보를 토대로 Resource Owner를 인증(Authentication)하여 Client의 서비스를 이용할 수 있게 합니다.
이렇게 OAuth2.0을 사용하면 보다 편리하고 안전하게 여러 검증된 API를 사용할 수 있으며 사용자의 편의성도 높일 수 있습니다.
여기까지 OAuth2.0의 권한 획득 과정을 살펴보았습니다. 감사합니다.
참고자료
'이론' 카테고리의 다른 글
DevOps 란 무엇일까? (0) | 2020.07.28 |
---|---|
Load Blancer란 무엇일까??? (0) | 2020.07.27 |
ORM과 JPA / Hibernate 란 무엇일까 (0) | 2020.07.23 |
WAS 와 웹 서버(Web server) 차이 (0) | 2020.07.15 |
Maven vs Gradle 메이븐과 그래들의 차이! (0) | 2020.07.08 |