OAuth 2.0 인증 코드 부여는 GitHub을 포함한 많은 서비스에서 사용되는 일반적인 인증 방법으로, 비밀번호를 공유하지 않고 제3자 애플리케이션이 사용자 데이터에 접근할 수 있도록 허용합니다. Apidog에서 이를 구현하고 디버깅하는 것은 귀중한 기술이 될 수 있습니다.
OAuth 2.0
OAuth 2.0은 사용자 자격 증명을 요구하지 않고 제3자가 보호된 리소스에 접근할 수 있도록 하는 널리 사용되는 인증 프로토콜입니다. 여기에는 리소스 소유자, 클라이언트, 인증 서버 및 리소스 서버라는 네 가지 주요 역할이 포함됩니다.

일반적인 인증 흐름
OAuth 2.0 프로토콜은 다양한 인증 흐름을 통해 인증을 구현합니다. 일반적인 인증 흐름에는 다음이 포함됩니다:
- 인증 코드 부여: 클라이언트는 사용자를 인증 서버로 리디렉션합니다. 사용자가 로그인하고 권한을 부여하면, 인증 서버는 클라이언트에게 인증 코드를 반환합니다. 클라이언트는 그런 다음 인증 코드와 자격 증명을 교환하여 액세스 토큰을 받습니다.
- PKCE(코드 교환용 증명 키)와 함께하는 인증 코드 부여: 표준 인증 코드 흐름과 유사하지만 클라이언트가 PKCE(코드 교환용 증명 키)를 사용하여 보안을 강화합니다.
- 리소스 소유자 비밀번호 자격 증명 부여: 리소스 소유자가 자신의 사용자 이름과 비밀번호를 클라이언트에게 직접 제공합니다. 클라이언트는 이러한 자격 증명을 사용하여 인증 서버로부터 액세스 토큰을 요청합니다.
- 클라이언트 자격 증명 부여: 클라이언트는 자신의 자격 증명을 사용하여 인증 서버에서 액세스 토큰을 직접 요청합니다. 이 흐름은 클라이언트가 자원에 접근해야 할 경우에 적합합니다.
- 암시적 부여: 브라우저 기반 애플리케이션에서 클라이언트로부터 직접 액세스 토큰을 얻기 위해 사용됩니다. 이 흐름은 일반적으로 웹 프론트엔드 애플리케이션에 사용됩니다.
Github OAuth 2.0 설정하기 (클라이언트 ID 및 클라이언트 비밀)
1단계: 애플리케이션 생성 및 클라이언트 ID와 클라이언트 비밀 받기
클라이언트 ID와 클라이언트 비밀을 받으려면 먼저 애플리케이션을 생성해야 합니다. 다음 링크를 클릭하여 Github에서 생성하세요: https://github.com/settings/applications/new, 그리고 "홈페이지 URL"에 도메인 이름을 입력하세요. 로컬 디버깅을 하는 경우 http://127.0.0.1:8000와 같은 로컬 서비스를 입력할 수 있습니다.
"Authorization callback URL"에 콜백 주소를 입력하세요. 이는 도메인 이름이나 로컬 콜백 주소가 될 수 있습니다. 예를 들어, http://127.0.0.1:8000/callback를 사용할 수 있습니다.
관련 구성을 모두 입력한 후 "애플리케이션 등록"을 클릭하여 생성하세요.

애플리케이션이 생성된 후 클라이언트 ID와 클라이언트 비밀이 생성됩니다. 클라이언트 비밀은 별도로 생성해야 합니다. "새 클라이언트 비밀 생성"을 클릭하여 키를 생성하세요.

2단계: 액세스 토큰 얻기
위의 첫 번째 단계가 준비되면 액세스 토큰(Token)을 신청할 수 있습니다. 우리는 이 단계를 Apidog를 통해 시연할 것입니다. Apidog는 매우 우수한 API 디버깅 및 관리 도구입니다.

Token 액세스 토큰은 Apidog에서 직접 얻을 수 있습니다. 아직 Apidog를 설치하지 않았다면 지금 다운로드하세요!
- Apidog에서 새 HTTP 프로젝트를 생성하고 엽니다. 그런 다음 프로젝트에서 새 요청을 생성하고 [문서 수정 -> 인증 -> OAuth 2.0 -> 옵션을 선택합니다.

2. 클라이언트 ID, 클라이언트 비밀 및 리디렉션 주소 구성
Apidog의 OAuth 2.0 페이지에서 선택된 기본 인증 모드는 인증 코드(authorization code mode)입니다.
Github OAuth 2.0도 인증 코드(authorization code mode)를 사용하므로 여기서 전환할 필요가 없습니다.

그런 다음 페이지 하단에서 클라이언트 ID, 클라이언트 비밀 및 콜백 URL을 찾아 입력하세요. 클라이언트 ID(클라이언트 ID), 클라이언트 비밀(클라이언트 비밀) 및 구성된 콜백 주소(콜백 URL)은 Github의 OAuth 2.0 서비스에서 얻어야 합니다.
그냥 입력하면 됩니다. 구체적인 매개변수는 위의 "1단계"에 있는 구성 내용입니다.

3. 인증 코드 요청 주소 구성
Github 공식 문서에 따르면, OAuth 2.0 인증을 수행할 때 인증 코드의 요청 주소(Auth URL)는:
https://github.com/login/oauth/authorize
이 인증 코드의 요청 주소를 Auth URL에 입력하면 됩니다. 우리는 이 주소를 로그인 인증 페이지로 이해할 수 있습니다.
이 페이지는 최초로 로그인 상태가 확인될 때 열리며(클라이언트의 창입니다), 이후 사용자 이름과 비밀번호를 입력하라는 요청이 있습니다.

일반적으로 로그인 인증 페이지를 수동으로 구성할 때, 인증 주소 뒤에 일부 매개변수를 추가해야 합니다.
하지만 Apidog에서는 URL 뒤의 매개변수를 일반적으로 추가할 필요가 없습니다. 질문 기호? 앞의 경로만 충분하며 다른 매개변수는 별도로 다른 옵션에 구성되어 있습니다.
물론 일부 쿼리 매개변수를 추가하고 싶다면 추가할 수 있습니다. 입력 상자 뒤의 아이콘을 클릭하여 추가하세요:

또한 "더 보기" 옵션을 확장하고 필요한 매개변수 값을 해당 옵션에 입력할 수 있습니다. 예를 들어 "Scope"에 필요한 권한인 read:user, user:email 등을 입력할 수 있습니다.
Github 도움말 문서의 권한 모듈을 방문하여 다른 권한에 대한 정보를 확인할 수 있습니다. "State" 옵션에는 state를 입력하세요. state는 교차 사이트 요청 위조를 방지하기 위한 것입니다.

4. 액세스 토큰 요청 주소 구성
Github 공식 문서에 따르면, 액세스 토큰을 신청하기 위한 요청 URL은:
https://github.com/login/oauth/access_token
위의 주소를 Apidog의 OAuth 2.0 페이지의 액세스 토큰 URL 입력 필드에 입력하면 됩니다.

5. Github OAuth 2.0 서비스의 액세스 토큰 얻기
위의 구성 항목이 설정된 후 "토큰 얻기" 버튼을 클릭하여 액세스 토큰을 얻을 수 있습니다.
클릭하면 처음 로그인하는 경우 권한 부여를 위한 창이 팝업됩니다. Github 계정의 사용자 이름과 비밀번호를 입력하면 됩니다.

사용자 이름과 비밀번호를 입력한 후에는 권한을 확인하거나 이중 인증을 수행하라는 요청을 받을 것입니다. 인증 후 확인을 클릭하세요.
인증이 완료되면 액세스 토큰이 자동으로 얻어지고 페이지에 표시됩니다. 동시에 Github에서 반환한 다른 정보도 파싱되어 표시됩니다. 여기서 "만료됨"이 표시되는 것은 Github이 우리에게 expires_in 속성을 반환하지 않아서 판단할 수 없기 때문입니다. 그러나 이 Token은 사용 가능합니다. 아래에서 요청을 시작해봅시다.

3단계: 토큰을 기반으로 공개 리소스 접근
액세스 토큰(Token)을 얻은 후에는 이 액세스 토큰을 사용하여 Github의 공개 리소스에 호출할 수 있습니다. Github API에서 특정 공개 리소스를 확인할 수 있습니다.
예를 들어, 다음 API는 사용자 정보를 얻습니다. 만약 인터페이스가 반환되지 않는다면, 권한이 있는지 확인해야 합니다. "2단계" 3항에서 언급한 바와 같이, Scope에서 구성하면 됩니다.

요청을 보낼 때 Apidog는 자동으로 Token을 요청 헤더의 Authorization에 추가하고 Bearer에 추가하여 전송합니다. URL에 Token을 포함하고 싶다면, 페이지의 구성 항목에서 Token의 "위치 추가"를 수정하고 "쿼리 매개변수"를 선택할 수 있습니다.

요약
OAuth 2.0은 제3자 애플리케이션이 사용자에게 사용자 이름과 비밀번호를 제공하도록 요구하지 않고 액세스 토큰을 얻을 수 있도록 하는 인증 프레임워크입니다. GitHub에서 사용하는 인증 프로세스는 "인증 코드 인증 프로세스"이며, 이 인증 프로세스는 Apidog에서 디버깅 및 구성할 수 있습니다.