Security
[Security] OAuth2.0
홍홍_
2022. 8. 3. 23:34
들어가기 앞서
우리는 요즘 편하게 로그인을 하고 있다.
따로 회원가입을 하지 않고 다른 소셜 플랫폼의 정보를 가지고 회원가입과 로그인을 손쉽게 하고있기 때문이다.
그러면 어떠한 기능이 우리에게 편한함을 안겨준 것일까?
그건 바로 OAuth2라는 프로토콜이다. 그럼 바로 OAuth2에 대해 알아보자
OAuth2란?
앞서 말했듯이 OAuth2(혹은 OAuth 2.0)는 인증을 위한 표준 프로토콜의 한 종류다.
권한이 필요한 리소스에 액세스를 하기 위해 클라이언트에게 권한을 제공(Authorization)하는 프로세스를 단순화,
즉 손쉽게 만들어주는 프로토콜 중 하나다.
OAuth를 쓰는 이유
첫 번째는 앞서 말한 편의성이다. 우리는 굉장히 많은 서비스들을 이용하고 있다.
OAuth를 사용하지 않는 서비스들은 각각의 서비스들 마다 회원가입이 필요하다.
회원가입도 귀찮을 뿐만 아니라 회원가입했던 정보를 기억하는 것도 불편하다.
그렇기 때문에 하나의 서비스에 회원가입된 정보를 계속 이용한다면 이러한 불필요 함을 해결해주기 때문이다.
이러한 편의성 뿐만 아니라, 보안상의 이점도 존재한다. 우리의 민감한 정보가 검증되지 않은 App에 노출되지 않고,
권한이 필요한 리소스에 대하여 미리 유저에게 권한에 대한 허가를 구하여 사용하기 때문에 유저는 더욱 안전하게 사용할 수 있다.
OAuth에서 지정하는 네 가지 역할
공부하기 전, 먼저 네 가지의 역할에 대하여 알아야 한다.
- Resource Owner: 권한이 필요한 리소스에 대하여 액세스 권한을 부여할 수 있는 엔터티, Resource Owner가 사람인 경우 end-user라고 부른다.
- Client: Resource Owner를 대신하여 권한이 필요한 자원을 요청하는 Client (ex. 내가 A라는 서비스를 통해 Google의 소셜 로그인을 이용한다면 A가 Client)
- Resource Server: 클라이언트의 요청을 수락하고 응답할 수 있는 서버이며 보호된 리소스를 호스팅 하는 Server(ex. A(Client가 GooglePhoto에서 내 사진을 가져올 경우, GooglePhoto가 Resource Server
- Authorization Server: Resource Server에게 Access Token을 발급하는 인증 서버입니다. Resource Owner를 성공적으로 인증한 후 Client에게 액세스 토큰을 발급하는 서버를 말합니다.
OAuth의 권한 부여 방식
- Authorization Code Grant : 권한 부여 승인 코드 방식
- Authorization Code Grant는 권한 부여 승인을 위해 자체 생성한 Authorization Code를 전달하는 방식이며 가장 기본이 되는 방식입니다. 또한 리프레시 토큰을 사용할 수 있습니다.
- Client Credentials Grant : 클라이언트 자격 증명 승인 방식
- 클라이언트 자신이 관리하는 리소스 혹은 권한 서버에 해당 클라이언트를 위한 제한된 리소스 접근 권한이 설정되어 있는 경우 사용하며, 자격 증명을 안전이 보장되는 클라이언트에만 사용이 가능하고, 리프레쉬 토큰은 사용할 수 없습니다.
- Implicit Grant : 암묵적 승인 방식
- 별도의 권한 부여 승인 코드를 요청하거나 받는 것 없이 엑세스 토큰을 발급받는 방식입니다. 자격증명을 안전하게 저장하기 힘든 클라이언트(스크립트 언어를 사용하는 브라우저)에게 최적화된 방식입니다. 리프레쉬 토큰은 사용할 수 없습니다.
- 권한 부여 승인 요청시 응답 타입(response_type)을 token으로 지정하여 요청합니다.
- Resource Owner Password Credential Grant : 자원 소유자 자격 증명 승인 방식
- 간단하게 로그인시 필요한 정보(username, password)로 액세스 토큰을 발급받는 방식입니다. 자신의 서비스에서 제공하는 애플리케이션의 경우에만 사용되는 인증 방식으로, 리프레시 토큰의 사용도 가능합니다.
- 하나의 시스템 내에서 여러가지 서비스를 가지고 있는 곳에서 주로 사용합니다. (카카오- 카카오 뱅킹, 카카오 웹툰 등)