OAuth2

kwak woojong·2022년 8월 8일
0

코드스테이츠

목록 보기
32/36
post-thumbnail

OAuth2?

OAuth

OAuth는 인증을 위한 표준 프로토콜의 한 종류다.

보안 된 리소스에 액세스하기 위한 권한 제공 프로세스를 단순화하는 프로토콜이다.

위키백과
OAuth("Open Authorization")는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다. 이 매커니즘은 여러 기업들에 의해 사용되는데, 이를테면 아마존, 구글, 페이스북, 마이크로소프트, 트위터가 있으며 사용자들이 타사 애플리케이션이나 웹사이트의 계정에 관한 정보를 공유할 수 있게 허용한다.

용어

  • Resource Owner: 액세스 중인 리소스의 유저입니다. 김코딩의 구글 계정을 이용하여 App에 로그인할 경우, 이때 리소스 오너 김코딩이 됩니다.

  • Client: 리소스 오너를 대신하여 보호된 리소스에 액세스하는 애플리케이션입니다. 클라이언트는 서버, 데스크탑, 모바일 또는 기타 장치에서 호스팅할 수 있습니다.김코딩이 A라는 애플리케이션을 Google의 소셜로그인을 이용해 사용한다면 A가 클라이언트가 됩니다.

  • Resource Server: 클라이언트의 요청을 수락하고 응답할 수 있는 서버입니다. 클라이언트(e.g. A 애플리케이션)가 Google Photo에서 김코딩의 사진을 가져오는 경우, Google Photo가 리소스 서버가 됩니다.

  • Authorization Server: Resource Server가 액세스 토큰을 발급받는 인증 서버입니다. 리소스 오너를 성공적으로 인증한 후 클라이언트에게 액세스 토큰을 발급하는 서버를 말합니다.

  • Authorization Grant: 클라이언트가 액세스 토큰을 얻는 방법을 의미합니다. 다음과 같은 방법들이 주로 사용됩니다.
    - Authorization Code Grant Type
    - Client Credentials Grant Type
    - Implicit Grant Type
    - Resource Owner Credentials Grant Type

  • Authorization Code: Authorization Grant의 한 타입으로 액세스 토큰을 발급받기 위한 Code를 의미합니다. Client ID로 이 Code를 받아온 후, Client Secret과 Code를 이용해 액세스 토큰을 받아올 수 있습니다.

  • Access Token: 보호된 리소스에 액세스하는 데 사용되는 인증 토큰입니다. Authorization Code와 Client Secret을 이용해 받아온 이 Access Token으로 이제 리소스 서버에 접근할 수 있습니다.

  • Scope: Scope는 토큰의 권한을 정의합니다. 주어진 액세스 토큰을 사용하여 액세스할 수 있는 리소스의 범위입니다. 이와 같은 설정을 통해 특정 유저의 사진첩에는 접근할 수 있지만, 연락처 등 다른 리소스에는 접근할 수 없도록 접근 권한을 지정할 수도 있습니다.

OAuth 인증방식

  1. 소비자가 서비스제공자에게 요청토큰을 요청한다.
  2. 서비스제공자가 소비자에게 요청토큰을 발급해준다.
  3. 소비자가 사용자를 서비스제공자로 이동시킨다. 여기서 사용자 인증이 수행된다.
  4. 서비스제공자가 사용자를 소비자로 이동시킨다.
  5. 소비자가 접근토큰을 요청한다.
  6. 서비스제공자가 접근토큰을 발급한다.
  7. 발급된 접근토큰을 이용하여 소비자에서 사용자 정보에 접근한다.


<출처 : 위키백과 OAuth>

인증부여 방식에 따른 종류

1. 권한 부여 승인 코드 방식

가장 많이 쓰이고 기본이 되는 방식임. 리프레시 토큰 사용이 가능하다.

  1. Resource Owner(유저)는 Client(애플리케이션)에 소셜 로그인 버튼을 누르는 등의 서비스 요청을 보냅니다.
  2. Client는 Authorization Server에 Authorization Code를 요청합니다. 이 때 미리 생성한 Client ID, Redirect URI, 응 답 타입을 함께 전송합니다.
  3. 로그인 팝업을 통해 Resource Owner는 로그인을 진행합니다.
  4. 로그인이 확인되면 Authorization Server는 Authorization Code를 Client에 전달합니다. (이전에 요청과 함께 전달한 Redirect URI로 Code를 전달합니다.)
  5. Client는 전달받은 Authorization Code를 이용해 액세스 토큰 발급을 요청합니다. 액세스 토큰을 발급할 땐 미리 생성한 Client Secret, Redirect URI, 권한 부여 방식, 액세스 토큰을 함께 전송합니다.
  6. 요청 정보를 확인한 후 Redirect URI로 액세스 토큰을 발급합니다.
  7. Client는 발급받은 액세스 토큰을 이용해 Resource Server에 자원을 요청합니다.
  8. 액세스 토큰을 확인한 후 요청 받은 자원을 전달합니다.

2. 클라이언트 자격 증명 승인 방식

일반적으로 사용자의 직접적인 상호 작용이 없이 백그라운드에서 실행하는 경우에 사용한다.

이 경우 관리자가 앱 자체에 직접 사용 권한을 부여한다. 리프레시 토큰은 사용할 수 없다.

3. 암묵적 승인 방식

별도의 권한 부여 승인 코드 없이 바로 액세스 토큰을 발급하는 방식이다.

리프레시 토큰 사용이 불가능하며, 인증과정을 생략한다.

4. 자원 소유자 자격 증명 승인 방식

로그인시 필요한 정보로 (userId 혹은 username / password)로 액세스 토큰을 발급 받는 방식이다. 자신의 서비스에서 제공하는 앱의 경우에만 사용한다. 리프레시 토큰도 사용 가능하다.

이를테면 네이버 아이디로 웹툰, 블로그 등에 로그인 하는 경우를 생각할 수 있다.

즉, 서버, 리소스서버, 클라이언트가 모두 같은 시스템에 속해 있을 경우 사용이 가능하다.

profile
https://crazyleader.notion.site/Crazykwak-36c7ffc9d32e4e83b325da26ed8d1728?pvs=4<-- 포트폴리오

0개의 댓글