궁금/정보보안

6. OAuth / OIDC(OpenID Connect)

네른 2020. 6. 17. 15:13

OAuth

OAuth는 접근 위임을 위한 개방형 표준을 의미한다.

  - 즉, 내 정보에 대한 타인의 접근을 허용(인가)하기 위한 공개된 표준이다!

  - OAuth를 이용하여 Authentication(인증)도 가능하지만, 주된 목적은 Authorization에 있다.

 

다시 말해, 제 3자가 별도의 인증정보 제공 없이 다른 웹사이트의 데이터에 접근 권한을 얻을 수 있는 것이다. (주로 API를 이용하여 데이터를 받아오거나 하는 용도)

  - 모바일 게임을 플레이하다보면, 특정 이벤트를 사용자의 페이스북 담벼락에 업로드하고자 한다. 이 때 사용되는 것이 OAuth이며, 해당 앱은 나에게 "당신의 담벼락에 내가 API를 이용해 글을 써도 됩니까?" 라고 묻는다.

  - 그래서 OAuth는 사용하고자 하는 데이터의 주체(페이스북, 네이버 등)에 대한 로그인을 요청하게 된다.

  - 결과적으로, OAuth는 로그인을 직접 하는 것은 아니고, 나에게 특정 데이터에 대한 접근을 위임해달라고 요청하는 것이다.

 

물론, OAuth도 Authentication 과정이 있으며, 이를 OAuth Dance라고 부른다.

해당 과정의 절차는 다음과 같다.

  1. 제3자(타 서비스)가 사용하고자 하는 데이터의 주체(Service provider - 서비스 제공자)에게 Request Token을 요청한다.

  2. 서비스 제공자는 제3자에게 Request Token을 발급한다.

  3. 제3자가 사용자를 서비스 제공자에게 다이렉트(direct)시키고, 서비스 제공자는 사용자(유저)의 신원을 확인하기 위해 인증 페이지(로그인)를 제공한다.

  4. 사용자가 로그인을 수행하고 권한 요청을 수락한다.

    - 즉, 사용자는 제3자가 아닌 서비스 제공자에 로그인하고, 데이터 접근 권한을 제3자에게 위임하는 것이다.

  5. 제3자는 인증 정보 등을 활용하여 서비스 제공자에게 Access Token을 요청한다.

  6. 서비스 제공자는 제3자에게 Access Token을 제공한다.

  7. 제3자는 해당 토큰을 이용하여 서비스 제공자의 API등에 접근하고 정보를 획득한다.

 

 

OIDC (OpenID Connect)

앞선 OAuth가 인가(Authorization)에 중점을 두고 있다면, OIDC는 인증(Authentication)에 중점을 두고 있는 프로토콜이다.

OIDC는 OAuth 2.0 프로토콜에 기반하고 있으며, 해당 프로토콜 위에서 사용자 인증을 위해 사용된다.

  - 여러 사이트를 접근할 때, 사용자로 하여금 단 한번의 로그인만으로 모든 사이트를 접근할 수 있도록 용이하게 만드는 것이 목적.

  - OAuth가 정보에 접근하기 위해 Access Token을 발급받는것이 주 목적이라면, OIDC는 사용자의 인증 정보가 담긴 ID Token을 발급받는것이 주 목적!

  - Access Token은 정보에 접근하기 위한 수단이지, 이걸 가지고 있다고 해서 해당 사용자가 "인증" 된 것은 아님.

 

과정은 전반적으로 OAuth와 비슷하다. 

 

  1. 사용자가 타 서비스에 로그인하고자 한다.

  2. 타 서비스는 OpenID Provider(IDP)에게 사용자 인증과 인가를 요청한다.

  3. 사용자는 IDP에 로그인을 시도하고, IDP는 사용자를 인증,인가한 후 인증 코드를 타 서비스에게 전달한다.

  4. 타 서비스는 전달받은 인증 코드를 사용하여 사용자의 Access Token, ID Token 등을 IDP에게 요청한다.

  5. IDP는 Access Token, ID Token 등을 타 서비스에게 제공하고 이 정보를 이용하여 타 서비스가 정보를 요청한다.

  - 여기서 사용하는 ID Token은 JWT(Json Web Token)의 형식으로 생성된다.