본문으로 바로가기

OAuth 2.0 이란?

category Web 2020. 3. 10. 18:18

1. OAuth이란?

OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해
웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다.

이 매커니즘은 여러 기업들에 의해 사용되는데, 이를테면 아마존, 구글, 페이스북, 마이크로소프트, 트위터가 있으며 사용자들이 타사 애플리케이션이나 웹사이트의 계정에 관한 정보를 공유할 수 있게 허용한다.

 

OAuth가 사용되기 전에는 인증방식의 표준이 없었기 때문에 기존의 기본인증인 아이디와 비밀번호를 사용하였는데,

이는 보안상 취약한 구조이다.

기본인증이 아닐 경우는 각 애플리케이션들이 각자의 개발한 회사의 방법대로 사용자를 확인하였다.

(예를 들면 구글의 AuthSub, AOL의 OpenAuth, 야후의 BBAuth, 아마존의 웹서비스 API 등이 있다.)

 

OAuth는 이렇게 제각각인 인증방식을 표준화한 인증방식이다.

OAuth를 이용하면 이 인증을 공유하는 애플리케이션끼리는 별도의 인증이 필요없다.

따라서 여러 애플리케이션을 통합하여 사용하는 것이 가능하게 된다.

2. 인증(Authentication)과 인가(Authorization)

OAuth는 인증 프로토콜이 아닌, 인가 프로토콜이다.

  • 인증

    인증은 누군가가 그들이 말하는 그 사람이 맞는지 실제로 확인하는 절차입니다. 사용자의 '아이디' '비밀번호'를 통해 로그인하는 경우 등을 인증이라고 볼 수 있습니다.

  • 인가

    인가는 일단 인증이 됐다면 당신이 하고 하는 어떤 일을 할 수 있는 권한이 있는지를 판단하는 절차입니다. 아이디와 비밀번호로 로그인후 해당 사용자가 실제 요청한 서비스에대한 '접근 권한'이 있는지를 확인하는 경우 등을 인가라고 볼 수 있습니다.

OAuth의 시작은 2006년에 트위터의 개발자와 소셜 북마크 서비스인 Gnolia의 개발자가 만나 인증 방식을 논의한 때부터였다.

두 회사의 개발자들은 그때까지 API 접근 위임에 대한 표준안이 없다는 것을 알았다.

그래서 2007년 4월 인터넷에 OAuth 논의체를 만든 뒤 OAuth드래프트 제안서를 만들어 공유했다.

그 뒤에 이 활동을 지지하는 사람이 생기게 되었고, 2008년 IETF 모임(73회, 미네소타에서 개최)에서 OAuth가 IETF 표준안으로 관리되야 하는 가에 대한 논의가 있었다. 그리고 2010년에 OAuth 1.0 프로토콜 표준안이 RFC5849로 발표되었다.

 

2007년에 나온 OAuth 1.0은 비공식 논의체에 의해 최초로 만들어진 것이고,

2010년 IETF OAuth 워킹그룹에 의해 이 프로토콜이 IETF 표준 프로토콜로 발표된 것이다.

 

현재 나와 있는 OAuth 2.0은 드래프트 단계에 있는 것으로, IETF OAuth 워킹그룹이 주축이 되어 만든 것이다.

OAuth 2.0은 OAuth 1.0과 호환되지 않지만, 인증 절차가 간략하다는 장점이 있다.

그래서 아직 최종안이 나오지 않았음에도 여러 인터넷 서비스에서 OAuth 2.0을 사용하고 있다.

3. OAuth2.0 특징

OAuth 1.0은 웹 애플리케이션이 아닌 애플리케이션에서는 사용하기 곤란하다는 단점이 있다.

또한 절차가 복잡하여 OAuth 구현 라이브러리를 제작하기 어렵고,

이런저런 복잡한 절차 때문에 Service Provider에게도 연산 부담이 발생한다.

 

OAuth 2.0은 이러한 단점을 개선한 것이다. OAuth 1.0과 호환성이 없고, 아직 최종안이 발표된 것은 아니지만 여러 인터넷 서비스 기업에서 OAuth 2.0을 사용하고 있다.

 

OAuth 2.0의 특징은 다음과 같다.

  • 웹 애플리케이션이 아닌 애플리케이션 지원 강화
  • 암호화가 필요 없음 HTTPS를 사용하고 HMAC을 사용하지 않는다.
  • Siganature 단순화 정렬과 URL 인코딩이 필요 없다.
  • Access Token 갱신 OAuth 1.0에서 Access Token을 받으면 Access Token을 계속 사용할 수 있었다. 트위터의 경우에는 Access Token을 만료시키지 않는다. OAuth 2.0에서는 보안 강화를 위해 Access Token의 Life-time을 지정할 수 있도록 했다.

이외에도 OAuth 2.0에서 사용하는 용어 체계는 OAuth 1.0과 완전히 다르다. 같은 목적의 다른 프로토콜이라고 이해는 것이 좋다.

하지만 아직 최종안이 나오지 않았기 때문에, 현재로서는 OAuth 2.0의 특징만 파악하는 것으로도 충분할 듯 하다.

4. OAuth2.0 사용

  •  연합된 신원(federated identity)

    사용자가 자신의 다른 계정으로 애플리케이션에 로그인할 수 있게 해줍니다. 예를 들면 카카오 계정으로 쇼핑몰에 로그인하는 경우, 해당 사용자는 단지 카카오 계정 하나만 관리하면 됩니다. 이런 의미에서, 여러 사이트들이 연합해 하나의 사용자 신원을 사용한다고 말할 수 있습니다.

  • 권한 위임(delegated authority)

    어떤 서비스가 사용자를 대신해서 다른 서비스의 리소스에 접근할 수 있게 해줍니다.
    예를 들면 LinkedIn에서 구글 사용자의 연락처 리스트를 보고 그 연락처에 있는 사람들을 링크드인 친구로 등록할 것을 추천하는 경우입니다. 즉, 사용자의 구글 연락처 리스트에 접근할 수 있는 권한이 링크드인에 위임된 것입니다.

두 가지 경우 모두 보호된 리소스에 해당 리소스 소유자를 대신해서 접근하는 것 입니다.

5. 사용의 장점

  • 여러 서비스 제공자의 API를 신뢰 할 수 있는 방법으로 사용할 수 있다.
  • 사용자는 이용 서비스에 ID/PW를 전달하지 않는다. 따라서 ID/PW가 탈취당할 일도 없다.
  • 사용자가 직접 접근권한을 취소시킬 수 있다.

참고 사이트