IntelliJ IDEA에서 GitHub 저장소로 커밋을 푸시하는 과정에서 다음과 같은 오류가 발생해 저를 당황케 했습니다. 이 문제를 해결하기 위해 다양한 블로그에 게시글을 확인했는데요. 제가 해결한 방법은 다음과 같습니다.
일단, GitHub 로그인 창 표시 후 로그인을 한 후 대기하면 오류 메시지가 표시되었습니다. 이 오류 메시지를 확인하면 접근에 실패했다고 하는 메시지가 출력되는 것을 확인할 수 있었습니다.
remote: Permission to <Organization>/<Repository>.git denied to <Username>.
fatal: unable to access '<Git Repository URL>': The requested URL returned error: 403
다른 게시글을 확인하니 2020년 11월에 GitHub에서 토큰 기반 인증을 모든 Git 행동에 적용된 것이 원인임을 알 수 있었습니다.* GitHub에서 토큰 기반 인증을 적용한 이유에 대해 살펴보니 사용자가 여러 웹 사이트에 동일한 비밀번호를 사용해 GitHub 계정에 접근할 수 있는 문제점을 방지하고자 암호 기반 인증을 허용하지 않는다는 것을 확인할 수 있었습니다.*
그렇다면 왜 IntelliJ IDEA가 Login via GitHub를 남겨두었는지 의문이 들었습니다. Login with Token만 두면 되지 않나..? 이 버튼의 존재는 다음에 서술할 해결 방법과 연관이 있습니다.
그래서 해결 방법은 두 가지가 있는데, 다음과 같습니다.
액세스 토큰 발급을 통한 인증
액세스 토큰을 발급하기 위해 GitHub 상단의 프로필 사진을 눌러 메뉴 창이 뜨면, Settings를 찾아 클릭합니다. Settings 메뉴의 최하단에 위치한 Developer settings를 찾아 클릭합니다. 그러면 다음과 같은 페이지가 우리를 맞아줍니다.
좌측의 Personal access tokens를 클릭한 후 Tokens (classic)를 클릭하여 개인용 액세스 토큰을 발급하는 페이지로 진입합니다.
페이지 우측 상단의 Generate new token을 클릭한 후 Generate new token (classic)을 클릭하여 새로운 액세스 토큰을 발급합니다.
토큰 발급 시 토큰이 무엇을 위해 쓰이는지, 언제 만료할지, 접근 권한을 설정해야 합니다. 저는 Note에 `IDEA : <Organization 이름>/<Repository 이름>`을, 만료일은 `No expiration`, 접근 권한은 `repo` 전체로 지정했습니다.
발급된 액세스 토큰을 저장해야 합니다. 저장하지 않으면 다시는 찾아볼 수 없으므로 재발급이 필요합니다. 이제 이 액세스 토큰을 가지고 IntellJ IDEA에 계정을 등록합니다.
브라우저 로그인을 통한 인증
브라우저 로그인을 통한 인증을 위해 추가 설정이 필요합니다. 설정 없이 진행하면 동일한 오류가 발생합니다.
File > Settings > Version Control > Git > Use credential helper를 활성화합니다. 이후 Login via GitHub 버튼을 클릭하여 브라우저를 통해 로그인하면 정상적으로 푸시되는 것을 확인할 수 있습니다.
Credential helper는 GitHub, Bitbucket, GitLab 등의 다양한 Git 플랫폼을 지원하며 처음 해당 리포지토리에 인증 시 로그인 창이 뜨며 이후 자격 증명이 저장된 상태에서 다시 인증이 필요한 명령어를 수행하면 자격 증명을 사용하여 인증을 시도합니다. 이 자격 증명 도우미에 흥미가 있으신 분들은 git-ecosystem/git-credential-manager를 참조하세요.