1. OAuth2 인증

  • 클라이언트 - 서버 - 제 3의 서비스 사이의 인증 방식이다

OAuth 인증 단계

 1) OAuth 용어

  • Resource Owner : 액세스 중인 리소스의 유저를 말한다
  • Client : Resource Owner 대신 보호된 리소스에 액세스하는 응용프로그램이다 (instagram)
  • Resource server : Client의 요청을 수락하고 응답할 수 있는 서버를 말한다 (kakao)
  • Authorization server : Resource server가 토큰을 발급받는 서버를 말한다 (kakao)
  • Authorization grant : Client가 Access token을 발급받기 위하여 사용하는 자격 증명이며, 4가지 종류가 주로 사용된다
    - Authorization Code Grant Type
    - Client Credentials Grant type
    - Implicit Grant Type
    - Resource Owner Credentials Grant Type
  • Authorization code : Access token을 발급받기 전에 필요한 code이다
    - Client ID로 이 Code를 받아온 후, Client Secret과 Code를 이용해 액세스 토큰을 받아올 수 있다
  • Access token : 보호된 리소스에 액세스하기 위하여 사용되는 credentials(자격 증명)이다
  • Scope : 주어진 Access token으로 액세스할 수 있는 리소스의 범위이다

 

2. OAuth2 동작 방식

 1) 권한 부여 방식에 따른 프로토콜 인증방식

  • Authorization Code Grant Type (권한 부여 승인 코드 방식)
    - 권한 부여 승인을 위해 자체 생성한 Authorization Code를 전달하는 방식이다
    - 가장 많이 사용되는 기본 방식이다
    - 리프레시 토큰이 사용 가능하다
    - 권한 부여 승인 요청시 응답 타입(response_type)을 code로 지정하여 요청한다

Authorization Code Grant Type

 

 

  • Client Credentials Grant : 클라이언트 자격 증명 승인 방식
    - 클라이언트 자신이 관리하는 리소스 혹은 권한 서버에 해당 클라이언트를 위한 제한된 리소스 접근 권한이 설정되어 있는 경우 사용이 가능하다
    - 자격 증명을 안전하게 보관할 수 있는 클라이언트에서만 사용되어야 한다
    - 리프레시 토큰의 사용은 불가능하다

Client Credentials Grant

 

  • Implicit Grant : 암묵적 승인 방식
    - 별도의 권한 부여 승인 코드 없이 바로 액세스 토큰을 발급하는 방식이다
    - 자격증명을 안전하게 저장하기 힘든 클라이언트(자바스크립트 등 스크립트 언어를 사용하는 브라우저)에게 최적화된 방식이다
    - 리프레시 토큰 사용이 불가능하다
    - Authorization Server는 client secret을 통해 클라이언트 인증과정을 생략한다
    - 권한 부여 승인 요청시 응답 타입(response_type)을 token으로 지정하여 요청한다

Implicit Grant

  • Resource Owner Password Credential Grant : 자원 소유자 자격 증명 승인 방식
    - 간단하게 로그인시 필요한 정보(username, password)로 액세스 토큰을 발급받는 방식이다
    - 자신의 서비스에서 제공하는 애플리케이션의 경우에만 사용되는 인증 방식이다
    - 리프레시 토큰의 사용도 가능하다
    - 예를 들어 네이버 계정으로 네이버 웹툰 애플리케이션에 로그인, 카카오 계정으로 카카오 지도 애플리케이션에 로그인하는 경우가 Resource Owner Password Credential Grant에 해당한다
    - 권한 서버, 리소스 서버, 클라이언트가 모두 같은 시스템에 속해 있을 때만 사용이 가능하다

 

 

3. OAuth2 실습

 1) Google API Console

  • 구글 Api Console로 이동한다
    - https://console.cloud.google.com/projectselector2/apis/dashboard?supportedpurview=project

 

  • 새로운 프로젝트를 생성한다
    - 이름은 자유롭게 설정한다
    - 생성한 프로젝트는 만들어지기까지 1분 내외의 시간을 기다려야 한다

  • '사용 설정된 API 및 서비스' 상단에 '프로젝트 선택'을 클릭한다

  • 생성된 프로젝트로 선택 시 API 및 서비스가 나타난다

 

  • 왼쪽 목록에서 OAuth 동의 화면을 클릭한다
    - OAuth 동의 화면에서 User Type은 외부로 한다
    - 앱 등록 수정 페이지에서 앱 이름을 작성한다
    - 본인 이메일을 선택하고 앱 로고를 등록한다
    - 저장 후 계속을 눌러 진행한다
    - 앱 도메인 등 나머지는 별도 설정 해줄 것이 현재 없어서 저장 후 계속을 눌러서 진행한다

  • OAuth 동의 화면이란 무엇인가요?
    - 승인에 OAuth 2.0을 사용하면 앱에서 Google 계정의 여러 액세스 범위에 대한 승인을 요청합니다.
    - Google에서 사용자에게 프로젝트 및 정책 요약과 요청된 액세스 범위가 포함된 동의 화면을 표시합니다.
  • OAuth 동의 범위란 무엇인가요?
    - 범위는 동의 화면에서 사용자를 대신해 액세스 권한을 요청할 사용자 데이터 종류를 정의합니다.
    - 사용 가능한 범위의 전체 목록을 참조하세요.
  • 민감한 범위란 무엇인가요?
    - 민감한 범위는 동의 화면에서 사용자에게 표시되기 전에 Google이 인증을 요청합니다.

  • 저장 후 계속을 클릭하면 '개발자 연락처 정보를 입력하라고 메시지가 표시된다
    - 필수 사항이므로 작성 후 다시 저장 후 계속을 클릭한다

  • 별도의 문제점이 없으면 다시 한번 저장 후 계속을 클릭한다

  • 최종적으로 이상이 없으면 대시보드로 돌아간다

  • 왼쪽 목록에서 사용자 인증 정보를 클릭한다
    - CREATE CREDENTIALS 클릭 후 OAuth 클라이언트 ID를 클릭하여 사용자 인증 정보를 만든다

      - 애플리케이션 유형은 웹 애플리케이션을 선택한다

      - 이름을 입력한다

      - 승인된 리디렉션 URL에 http://localhost:8080/login/oauth2/code/google 를 입력한다

      - 만들기를 클릭한다

  • 구글 로그인이 완료되면 구글 서버 → 애플리케이션 서버로 인증되었다는 코드를 보내준다
    - 코드를 통해서 액세스 토큰을 요청한다
    - 액세스 토큰을 받아 사용자 대신 서버에서 인증 처리를 할 수 있다.

 

  • 만들기 클릭 시 OAuth 클라이언트 ID와 보안 비밀번호가 발급된다
    - 해당 정보를 다른 사람에게 노출/공유해서는 안된다
    - 반드시 정보를 별도로 저장/기록 해 둔다

OAuth 클라이언트 ID/Password 생성
Json 파일

 

  • OAuth 2.0 클라이언트 ID가 생성되었다

+ Recent posts