GitHub OAuth 설정

GitHub OAuth 앱은 앱당 Authorization callback URL을 하나만 등록할 수 있으므로, 스테이징과 프로덕션 도메인을 따로 운영한다면 환경마다 별도의 OAuth 앱을 만들어야 합니다.

설정 단계

  1. 1

    GitHub Developer settings 열기

    github.com에 로그인한 뒤 오른쪽 상단의 프로필 사진을 클릭해 Settings → Developer settings → OAuth Apps로 이동합니다. 바로가기: github.com/settings/developers.

  2. 2

    새 OAuth 앱 등록

    "New OAuth App"을 클릭합니다. GitHub이 네 개의 입력란을 요구합니다. 라벨은 정해져 있지만 값은 앱을 설명하는 내용이면 무엇이든 됩니다.

  3. 3

    애플리케이션 정보 입력

    Application name: 사용자가 GitHub 동의 화면에서 보게 될 앱 이름을 입력합니다. Homepage URL: 배포된 앱 URL(https://<배포된-도메인>)을 입력합니다. Application description(선택): 동의 화면에 함께 표시될 한 줄 설명입니다. Authorization callback URL: 위에 표시된 DontCode 리다이렉트 URL(https://<배포된-도메인>/api/auth/oauth/callback)을 그대로 붙여넣습니다.

  4. 4

    콜백 URL은 하나만 가능합니다, 꼭 확인하세요

    Google이나 카카오와 달리 GitHub OAuth 앱은 앱당 callback URL을 하나만 등록할 수 있습니다. 동일 앱에 여러 변형 URL을 추가할 수 없습니다. 스테이징과 프로덕션을 별도 도메인으로 운영한다면 OAuth 앱을 두 개 만들어 각 환경에 맞는 Client ID를 DontCode의 해당 환경에 입력하세요. DontCode 대시보드는 인증된 도메인별 리다이렉트 URL을 표시해 줍니다.

  5. 5

    Register application 클릭

    GitHub이 앱을 생성하고 해당 앱의 설정 페이지로 이동시킵니다. 페이지 상단에 Client ID가 표시되어 있습니다(20자 hex 문자열).

  6. 6

    클라이언트 시크릿(Client Secret) 발급

    같은 설정 페이지의 "Client secrets" 섹션에서 "Generate a new client secret"을 클릭합니다. GitHub이 sudo 인증이나 2FA 확인을 요청할 수 있습니다. 시크릿은 한 번만 표시되며, 페이지를 벗어나면 다시 확인할 수 없으니 바로 복사해 두세요. 비밀번호처럼 취급하세요.

  7. 7

    DontCode에 두 값 모두 붙여넣기

    DontCode 프로젝트의 사용자 → 로그인 → GitHub으로 이동합니다. Client ID와 Client Secret을 각 필드에 붙여넣고 저장을 클릭합니다. 앱이 자동으로 재배포되며 GitHub 로그인 버튼은 몇 초 안에 적용됩니다.

  8. 8

    이메일 scope는 자동으로 요청됩니다

    DontCode는 매 로그인 시 user:email scope를 GitHub에 자동으로 요청합니다. 이를 통해 /user/emails에서 사용자의 인증된 기본 이메일을 가져오므로, 사용자가 GitHub 공개 프로필에서 이메일을 비공개로 설정했더라도 계정에 이메일이 반드시 부여됩니다. 별도로 설정할 필요는 없습니다.

GitHub OAuth 설정: 문제 해결

일반적인 문제는 메인 가이드의 문제 해결 섹션도 함께 확인하세요.

"The redirect_uri MUST match the registered callback URL for this application"

GitHub은 callback URL이 한 글자도 다르지 않게 일치해야 합니다. 프로토콜(http vs https), 끝의 슬래시, 호스트를 다시 확인하세요. 배포 도메인이 바뀌었다면(커스텀 도메인 전환, 환경 변경 등) GitHub의 OAuth 앱 Authorization callback URL도 업데이트하세요. 여러 URL이 필요하다면(스테이징 + 프로덕션) 환경마다 OAuth 앱을 별도로 등록해야 합니다, GitHub은 한 앱에 여러 callback URL을 허용하지 않습니다.

"Bad credentials" 또는 /user 호출 시 401

대부분 DontCode에 저장된 Client Secret이 잘못되었거나, GitHub에서 시크릿을 재발급한 뒤 DontCode에 다시 붙여넣지 않은 경우입니다. GitHub에서 OAuth 앱을 열어 새 client secret을 발급한 다음 DontCode에 다시 붙여넣고 저장을 클릭하세요. 기존 시크릿은 재발급 시점에 즉시 폐기됩니다.

사용자가 로그인했는데 DontCode에 이메일이 github:1234@oauth.local로 표시됨

GitHub이 이메일을 반환하지 않을 때 DontCode가 사용하는 임의 이메일입니다. DontCode가 자동으로 요청하는 user:email scope가 있다면 발생하지 않아야 합니다, 모든 GitHub 사용자는 최소 하나의 인증된 이메일을 가지고 있습니다. 만약 이 메시지를 본다면, 사용자가 동의 도중 이메일 권한을 거절했을 가능성이 큽니다. 사용자에게 다시 시도하고 모든 동의 항목을 승인해 달라고 요청하세요.

로그인할 때마다 GitHub이 권한 동의를 요구함

처음 로그인할 때와 새 scope가 추가될 때만 발생하는 정상 동작입니다. 동일한 scope에 대해 두 번째 로그인부터는 동의 화면이 표시되지 않습니다. 나중에 scope를 변경하면(예: read:user 추가) 사용자에게 한 번 다시 동의 화면이 표시됩니다.