✔︎ OAuth란
OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준
✔︎ OAuth 용어
- User(사용자)
- 서비스 제공자와 소비자를 사용하는 계정을 가지고 있는 개인
- 내가 개발한 서비스의 사용자들 (Resource Owner)
- Consumer(소비자)
- Open API를 이용하여 개발된 OAuth를 사용하여 서비스 제공자에게 접근하는 웹사이트 또는 어플리케이션
- 내가 개발하는 서비스 (Client)
- Service provider(서비스 제공자)
- OAuth를 통해 접근을 지원하는 웹 어플리케이션
- Google, Kakao, face book, apple (Resource Server)
- Consumer Secret(소비자 비밀번호)
- 서비스 제공자에서 소비자가 자신임을 인증하기 위한 키
- request token(요청 토큰)
- 소비자가 사용자에게 접근권한을 인증받기 위해 필요한 정보가 담겨있으며 후에 접근 토큰으로 변환된다.
- 접근 토큰(access token)
- 인증 후에 사용자가 서비스 제공자가 아닌 소비자를 통해서 보호된 자원에 접근하기 위한 키를 포함한 값
✔︎ OAuth 1.0
- 구현 복잡
- 어플리케이션(모바일)에 대한 지원 부족
✔︎ OAuth 2.0
- 기능의 단순화
- 규모의 확장
- https가 필수
- 암호화 https에 맡김
- 인증 서버를 분리 할 수 있도록 함
✔︎ OAuth 2.0 인증 종류
- Authorization Code Grant
- 서버 사이드 코드로 인증하는 방식
- 권한서버가 클라이언트와 리소스 서버간의 중재 역할을 한다
- Access Token을 바로 클라이언트로 전달하지 않아 잠재적 유출을 방지
- 로그인시에 페이지 URL에 response_type=code라고 넘긴다
- Authorization Code은 일회성 값(access token 발급 이후에 바로 폐기), 노출되어도 크게 위험하지 않다
- Implicit Grant
- OAuth1.0과 가장 비슷한 인증방식
- Public Client인 브라우저 기반의 어플리케이션(Javascript application)이나 모바일 어플리케이션에서 이 방식을 사용하면 된다.
- OAuth 2.0에서 가장 많이 사용되는 방식이다.
- 권한코드 없이 바로 발급되서 보안에 취약하다.
- Access-Token이 URL에 노출되기 때문에 보안상 리스크가 있다.
- 백엔드 서버가 없는 제한적인 환경에서만 사용을 권장한다.
- 주로 Read only인 서비스에 사용.
- 로그인시에 페이지 URL에 response_type=token 라고 넘긴다.
- Password Credentials Grant
- Client에 아이디/패스워드를 저장해 놓고 아이디/패스워드로 직접 access token을 받아오는 방식이다.
- Client 를 믿을 수 없을 때에는 사용하기에 위험하기 때문에 API 서비스의 공식 어플리케이션이나 믿을 수 있는 Client에 한해서만 사용하는 것을 추천한다.
- 로그인시에 API에 POST로 grant_type=password 라고 넘긴다
- Client Credentials Grant
- 어플리케이션이 Confidential Client일 때 id와 secret을 가지고 인증하는 방식이다.
- 로그인시에 API에 POST로 grant_type=client_credentials 라고 넘긴다.
- 서버간 통신에 사용한다.
✔︎ OAuth 2.0(Authorization code grant)의 요소
-
client
OAuth 2.0을 사용해 서드파티로 로그인 기능을 구현할 자사 또는 개인 어플리케이션 서버
-
resource Owner
- 서드파티 어플리케이션(Google, Facebook, Kakao 등)에 이미 개인정보를 저장(회원가입)하고 있으며 Client가 제공하는 서비스를 사용하려는 사용자
- (Resource == 개인정보)
-
resource Server
사용자의 개인정보를 가지고있는 어플리케이션(Google, Facebook, Kakao 등) 서버다. Client는 Token을 이 서버로 넘겨 개인정보를 응답 받을 수 있다
-
authorization Server
- 권한을 부여해주는 서버
- 사용자는 이 서버로 ID, PW를 넘겨 Authorization Code를 발급 받을 수 있다.
- Client는 이 서버로 Authorization Code를 넘겨 token을 발급 받을 수 있다.
✔︎ 참고