개념
인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준
- OAuth 사용 전에는 인증 방식의 표준이 없어 기본 인증인 아이디와 비밀번호 사용 -> 보안상 취약한 구조
- 기본 인증이 아닐 경우, 각 애플리케이션이 각자 개발한 회사의 방법대로 사용자 확인
ex) 구글 AuthSub, AOL OpenAuth, 야후 BBAuth, 아마존 웹서비스 API - 이렇게 제각각인 인증방식을 표준화한 인증 방식
- OAuth 이용하면 이 인증을 공유하는 애플리케이션끼리는 별도의 인증 불필요 -> 여러 애플리케이션을 통합하여 사용하는 것이 가능하게 됨
- OAuth 2.0은 1.0에서 알려진 보안 문제 등을 개선한 버전
구성 및 종류
구성
- 리소스 소유자 : API에 대한 권한을 가지고 있으며, 이를 위임할 수 있는 이용자
- 보호된 리소스 : 리소스 소유자가 접근하는 대상
- 클라이언트 : 리소스 소유자를 대신해 보호된 리소스에 접근하는 소프트웨어 등
- 인가 서버 : 리소스에 접근할 수 있는 접근 토큰을 발급
프로토콜 종류
종류(Type) | 설명 |
인가 코드 승인 (Authorization Code Grant) |
|
암묵적 승인 (Implicit Grant) |
|
리소스 소유자 암호 자격 승인 (Resource Owner Password Credentials Grant) |
|
클라이언트 자격 승인 (Client Credentials Grant) |
|
OAuth1.0 vs OAuth2.0
OAuth1.0 | OAuth2.0 | |
참여자 | - 이용자 - 소비자 - 서비스 제공자 |
- 자원 소유자 - 클라이언트 - 권한 서버 - 자원 서버 |
토큰 | - 요청 토큰(Request Token) - 접근 토큰(Access Token) |
- 접근 토큰(Access Token) - 재발급 토큰(Refresh Token) |
유효기간 | - 접근 토큰의 유효 기간이 없음 | - 접근 토큰 유효기간 부여 - 만료 시 재발급 토큰 이용 |
클라이언트 | - 웹 서비스 | - 웹, 앱 등 |
구성요소
Resource Owner
- 웹 서비스를 이용하려는 유저, 자원(개인정보)을 소유하는 자, 사용자
- 요청하고자 하는 자원의 소유자이자, 인증 주체
- ex) 이용자
Client
- 자사 또는 개인이 만든 애플리케이션 서버
- 자원을 필요로 하는 서비스
- 자원 소유자의 권한으로 권한 서버에서 인증을 받아 자원 서버에 자원 요청
- ex) 쇼핑몰 등
Authorization Server
- 인증을 처리하고 권한을 부여해주는 서버
- 사용자는 이 서버로 ID, PW를 넘겨 Authorization Code를 발급 받을 수 있음
- Client는 이 서버로 Authorization Code를 넘겨 토큰을 발급 받을 수 있음
- ex) 페이스북, 네이버, 구글, 카카오 등
Resource Server
- 사용자의 개인정보를 가지고 있는 애플리케이션(구글, 페이스북, 네이버, 카카오 등) 회사 서버
- Client는 토큰을 이 서버로 넘겨 개인정보를 응답받을 수 있음
- 자원을 가지고 있는 서버
- ex) 페이스북, 네이버, 구글, 카카오 등
Access Token
- 자원에 대한 접근 권한을 Resource Owner가 인가하였음을 나타내는 자격증명
- 자원 서버에 자원을 요청할 수 있는 토큰
Refresh Token
- Client는 Authorization Server로부터 access token과 refresh token을 함께 부여받음
- access token은 보안상 짧은 만료기간이 지나면 사용자는 다시 로그인 해야하지만, refresh token이 있다면 access token 만료 시 refresh token을 통해 access token을 재발급 받아 다시 로그인 할 필요가 없음
- 권한 서버에 접근 토큰을 요청할 수 있는 토큰
인증방식
- 사용자는 특정 애플리케이션에서 OAuth 서비스를 요청한다.
- 애플리케이션(Client)에서는 OAuth 서비스에 Authorization Code를 요청한다.
- OAuth 서비스는 Redirect를 통해 Client에게 Authorization Code를 부여한다.
- Client는 Server에게 OAuth 서비스에서 전달받은 Authorization Code를 보낸다.
- Server는 Authorization Code를 다시 OAuth 서비스에 전달해 Access Token을 전달받는다.
- Server는 Access Token으로 Client를 인증하고 요청에 대한 응답을 반환한다.
[참고자료]
https://ko.wikipedia.org/wiki/OAuth
OAuth - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. OAuth("Open Authorization")는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여
ko.wikipedia.org
https://tecoble.techcourse.co.kr/post/2021-07-10-understanding-oauth/
OAuth 개념 및 동작 방식 이해하기
1. OAuth란? image 웹 서핑을 하다 보면 Google과 Facebook 및 Twitter…
tecoble.techcourse.co.kr
https://hwannny.tistory.com/m/92
OAuth 2.0 개념 정리
들어가며 OAuth 2.0이 실무, 사이드프로젝트에서 많이 사용했던 기술이지만 OAuth 2.0이 가진 요소와 개념들에 대해 명확하게 머리속으로 정리가 안되어있는것 같아 경험하면서 이해했던것 토대로
hwannny.tistory.com
[WEB] 📚 OAuth 2.0 개념 정리 (그림으로 이해하기 쉽게)
OAuth란? 웹 서핑을 하다 보면 Google과 Facebook 등의 외부 소셜 계정을 기반으로 간편히 회원가입 및 로그인할 수 있는 웹 어플리케이션을 쉽게 찾아볼 수 있다. 클릭 한 번으로 간편하게 로그인할
inpa.tistory.com
IT위키
IT에 관한 모든 지식. 함께 만들어가는 깨끗한 위키
itwiki.kr
https://velog.io/@undefcat/OAuth-2.0-%EA%B0%84%EB%8B%A8%EC%A0%95%EB%A6%AC
[OAuth 2.0] OAuth란?
RFC 6749를 공부하면서 배운 내용을 바탕으로 OAuth 구현 개발자의 입장이 아닌, 클라이언트 개발자 입장으로 OAuth 2.0을 간략히 정리하고자 한다.
velog.io
https://doqtqu.tistory.com/m/295
[OAuth] OAuth2.0란?
OAuth(Open Authorization)란? 자신이 소유한 리소스에 소프트웨어 애플리케이션이 접근할 수 있도록 허용해 줌으로써 접근 권한을 위임해주는 개방형 표준 프로토콜 OAuth 탄생 배경 OAuth이 등장하기
doqtqu.tistory.com
https://www.ssemi.net/what-is-the-oauth2/
OAuth 란 무엇인가?
어떻게 시작해야 할까? 어떻게 설명해야 잘 설명할 수 있을까? 고민을 했다 우선 이전에 설명 했듯이 [https://www.ssemi.net/sso-configuration/]SSO는 서비스고,OAUTH는 규약(프로토콜) 이다 요식업 서비스에
www.ssemi.net
OAuth 2.0 소셜 로그인 구현하기(feat. 깃허브)
OAuth 2.0 OAuth 는 기본적으로 서비스 제공자(깃허브, 트위터, 페이스북)가 신뢰할 수 없는 타 어플리케이션에게 사용자의 아이디와 패스워드를 제공하지 않더라도 사용자의 특정 정보에 접근하거
pronist.dev
'CS > WEB' 카테고리의 다른 글
SSO(Single Sign-On)란? (0) | 2022.10.24 |
---|---|
OpenID, OIDC(OpenID Connect)란? (0) | 2022.10.24 |
Authentication(인증) vs Authorization (인가) (0) | 2022.10.24 |
쿠키(Cookie), 세션(Session), 토큰(Token) 인증 (0) | 2022.10.17 |
JWT(JSON Web Token)란? (0) | 2022.10.17 |