10월 5일 목요일 TIL 회고록
OAuth(OAuth2.0) 이란 무엇일까?
OAuth는 Open Authorization의 줄임말로 보안 위임 액세스(Secure Delegated Access) 개방형 표준(Open Standard) 이다.
Third-Party 프로그램에게 리소스 소유자를 대신하여 리소스 서버에서 제공하는 자원에 대한 접근 권한을 위임하는 방식을 제공한다.
현재 OAuth 1.0, OAuth 2.0 두 버전이 존재한다.
Open Standard
많은 사람들이 OAuth를 API라고 생각하는데 OAuth는 개방형 표준(Open Standard) 이다.
개방형 표준이라하면 기술 표준이 문서가 공개되어 있으며 사용이 자유로운 것을 뜻하는데 OAuth는 이러한 표준인 것이다.
그래서 누구나 만들 수 있고 활용할 수 있으며 그 위에 HTTPS, API, 서버, 토큰 등의 개념이 올라가있는 것이다. 그렇다면 OAuth는 어떤 것에 대한 표준일까?
바로 앱이 클라이언트 애플리케이션에 보안 위임 액세스(Secure Delegated Access) 를 제공하는데 사용하는 표준이다.
풀어 말하면 A 서비스를 이용하는 사람들이 별다른 비밀번호나 자격증명없이 로그인할 수 있도록 B 서비스에서의 접근 권한을 부여할 수 있게 하는 표준인 것이다. 구글로그인, 카카오로그인, 애플로그인 것들을 생각하면 이해가 쉽다.
OAuth2.0 프로토콜이라고도 불리고 프레임워크라고도 불린다.
OAuth1.0, OAuth2.0
OAuth는 두 가지 버전이 존재한다. OAuth1.0이 먼저 개발됐지만 암호화나 운용에 있어 구현이 힘든 면이 있었기 때문에 이보다 더 쉽고 간단하게 구현할 수 있으며, 웹에만 한정되어 있지 않은 OAuth2.0을 많이 사용한다.
OAuth2.0은 인증(Authentication) 프로토콜이 아니라 인가(Authorization) 프로토콜이다.
인증(Authentication)
- 누가 누구인지 확인하는 프로세스이다.
- ex) 비행기를 타기 전 탑승자의 신원을 확인하는 것, 아이디와 비밀번호를 통해 유저를 확인하는 것
인가(Authorization)
- 사용자가 접근할 수 있는 무엇인가를 확인하는 프로세스이다. 즉, 권한을 부여하는 것이다.
- ex) 비행기에 탄 탑승자에게 해당 좌석을 부여하는 것, 유저의 등급에 따라 해당 데이터를 보여주는 것
OAuth는 그저 권한을 부여하는 것이다. 실제로 소셜로그인을 하면 권한을 부여하시겠습니까? 라고 묻는데 이것은 바로 OAuth2.0, 인가 프로토콜을을 이용했기 때문이다.
OAuth2.0 구성 요소
1. Resource Owner : 사용자
2. Client : 리소스 서버에서 제공해주는 자원을 사용하는 외부 플랫폼
3. Authorzation Server : 외부 플랫폼이 리소스 서버의 자원을 사용하기 위한 인증 서버
4. Resource Server : 사용자의 자원을 제공해주는 서버
OAuth2.0은 위와 같이 4개의 구성요소를 가지고 있다. 예를 들어 나는 페이스북 계정이 있고, 페이스북 로그인 기능을 지원하는 외부 플랫폼에 로그인을 하려고 한다. 이런 경우 외부 플랫폼을 통해 페이스북 인증 서버(Authorization Server)에 인증 요청을 하게 되고 외부 플랫폼은 나의 페이스북 정보들(이름, 나이, 프로필사진 등등..)을 사용할 수 있는 권한을 얻게 된다.
OAuth2.0 인증 종류
- Authorization Code Grant : 권한 코드 승인 방식
- Implicit Grant : 암시적 승인 방식
- Password Credentials Grant : 비밀번호 자격 증명 방식
- Client Credentials Grant : 클라이언트 자격 증명 방식
OAuth2.0 명시된 인증 종류는 위와 같이 크게 4가지로 구분된다.
1. Authorization Code Grant
일반적으로 서버 사이드에서 인증을 처리할 때 이용하는 방식으로 Resource Owner로부터 리소스 사용에 대한 허락을 의미하는
Authorization Code를 이용하여 Access Token을 요청하는 방식이다. 이 방식은 Access Token이 바로 클라이언트로 전달되지 않기 때문에 다른 방식보다 보안이 좋다는 장점이 있다.
2. Implicit Grant
권한 코드 없이 바로 토큰을 발급하여 사용하는 방식으로 브라우저나 앱과 같은 서버와의 연동이 없는 애플리케이션에서 주로 사용된다.
권한 코드 검증이 들어가지 않기 때문에 Read Only 서비스에만 사용하는 것이 좋다.
3. Password Credentials Grant
Client에 Service Provider(구글, 페이스북 등)의 아이디와 비밀번호를 저장해두고 사용하는 방식이다.
일반적으로 Client와 Service Provider의 관계가 아주 긴밀한 관계일때만 사용하는 것이 좋다.
4. Client Credentials Grant
Client와 Resource Owner가 같을 때 사용하는 인증 방식이다. Client와 Resource Owner가 같기 때문에 추가적인 인증이 필요하지 않고 Authorization Server로부터 바로 토큰을 받을 수 있다.
출처
OAuth(OAuth2.0)란 무엇일까? 소셜로그인이 작동하는 법
OAuth(OAuth2.0)란 무엇일까? 소셜로그인이 작동하는 법 사이트에 회원가입을 하지않아도 이미 가지고 있는 아이디를 통해 로그인할 수 있게 만드는 소셜로그인. 많은 사람들이 들어봤거나 사용해
matamong.tistory.com
https://deeplify.dev/back-end/spring/oauth2-social-login
[Spring Boot] OAuth2 소셜 로그인 가이드 (구글, 페이스북, 네이버, 카카오)
스프링부트를 이용하여 구글, 페이스북, 네이버, 카카오 OAuth2 로그인 구현하는 방법에 대해서 소개합니다.
deeplify.dev
https://blog.naver.com/mds_datasecurity/222182943542
OAuth 2.0 동작 방식의 이해
OAuth 2.0(Open Authorization 2.0, OAuth2)은 인증을 위한 개방형 표준 프로토콜입니다. 이 프로토...
blog.naver.com