본문 바로가기

Study/IT 분야 연구

[GitHub] API 응답시에 "Bad credentials" 메시지 발생시 조치방법

반응형

GitHub에서 제공하는 hub라는 프로그램을 통해서 GitHub API query를 진행하다 보면 "Bad credentials"라는 메시지가 발생하는 경우가 종종 있습니다. 분명 Git의 credential은 문제가 없는데 GitHub에서는 왜 credential 문제가 발생하는지 의아할 때가 많습니다. 이와 같은 Credential 문제가 발생한 원인에 대해서 살펴보고 어떻게 해결할 수 있는지에 대해서 설명드리겠습니다.

 

[문제 현상]

 

아래는 제 reposotory의 pull reuqest 목록을 받아오는 GitHub API 명령과 응답 값입니다. 

 

$ hub api repos/group/repo/pulls | jq '.'
{
  "message": "Bad credentials",
  "documentation_url": "https://developer.github.com/enterprise/2.21/v3"
}

 

정상적인 상황에서는 수많은 Pull Request 정보들이 JSON 문법으로 출력되어야 하나, 문제의 상황에서는 "Bad crednetials"라는 메시지가 리턴됩니다. 이 문제는 당연히 GitHub API에서 Credential 정보가 맞지 않아서 발생한 문제입니다. 

 

 

[Credential 문제의 근본 원인]

 

제 경우는 Git은 잘 되는데, GitHub가 제대로 되지 않아서 상당히 의아했습니다. 이 문제는 주로 credential이 만료되어 재발급하였거나, 기존 credential을 삭제하고 새로 생성했을 경우에 많이 발생합니다. 새로 생성한 token을 Git에는 설정하였으나, GitHub에서는 설정되지 않아서 발생하는 경우가 가장 흔합니다. 그 이유는 Git의 credential이 저장되는 위치와, GitHub의 credential이 저장되는 위치가 서로 다르기 때문입니다.

 

[Git의 Credential 정보 확인]

 

Git의 Credential이 저장되도록 설정되었을 경우 아래의 경로에 credential이 저장됩니다.

 

$ cat ~/.git-credentials
https://(my_id):(token)@github.com

 

위와 같이 Git의 credential이 저장되려면, helper 환경설정이 store로 되어 있어야 합니다. 

그러기 위해서는 git config --global --add credential.helper store 라고 입력하시면 됩니다. 

 

$ cat ~/.gitconfig
[user]
	email = abc@abc.com
	name = my_id
[credential]
	helper = store

 

위와 같이 credential 항목의 helper가 store로 설정되어 있으면 credential 정보를 ~/.git-credentials 파일로부터 가져옵니다.

 

 

[GitHub의 Credential 정보 확인]

 

반면 GitHub의 Credential은 ~/.config/hub 파일에 저장이 됩니다.

 

$ cat ~/.config/hub
github.com:
- user: my_id
  oauth_token: token
  protocol: https

 

위와 같이 ~/.config/hub 파일을 열어봤을 때, credential 정보가 맞지 않을 경우 credential 정보를 수정합니다. Token을 변경하였을 때, Git에는 변경된 Token을 설정하였으나, GitHub에서는 변경된 Token을 설정하지 않아서 발생한 문제일 가능성이 상당히 높습니다. 

 

혹은 rm 명령을 통해서 hub 설정 파일을 통째로 날리는 것도 하나의 방법입니다.

 

$ rm ~/.config/hub

 

 

[GitHub에 토큰 값이 commit 되면서 토큰이 자동 삭제되는 경우]

 

최근에 토큰 값이 유출되면서 보안상의 이유로 토큰이 자동으로 폐기되는 경우를 목격했습니다. 자세한 내용은 "[GitHub] API 호출시 Bad Credentials 에러 발생시 조치 방법" 글을 참조하시기 바랍니다.

 

 

[끝맺음 말]

 

이것으로 GitHub API Query 시에 Bad Credential 문제가 발생했을 경우 조치방법에 대한 설명을 모두 마칩니다.

반응형