Content access is protected by token : Sonatype OSSRH 401 배포 문제 해결법
오랜 만에 오픈 소스 업데이트를 작업을 했으나, 모든 publish 작업에서 401 에러가 났습니다. username/password 방식의 인증이 막히고, 토큰 방식으로 강제된 것인데, 토큰 인증으로 변경한 과정을 기록해보았습니다.

bottomsheetdialog-compose
라는 오픈소스를 배포했습니다. 현재는 material3 compose의 ModalBottomSheet
라는 훌륭한 대체재가 있지만, 오픈 소스 출시 당시에는 마땅한 대체재가 없었던 것으로 회상해봅니다.문제 발생
bottomsheetdialog-compose
는 현재 별다른 기능 추가 없이 compose 버전만 업데이트하는 유지보수를 이어나가고 있는데, 오늘 업데이트 작업을 하다보니 아래와 같은 메시지와 함께 모두 실패 했습니다.
Received status code 401 from server: Content access is protected by token
검색하다보니, 기존 username/password 기반의 인증 방식이 토큰 방식으로 강제된 것으로 보였습니다. 대략 올해 6월 쯤 관련 업데이트가 있었던 것으로 추정됩니다.

문제 해결법
저는 Sonatype OSSRH (OSS Repository Hosting)를 통해 오픈소스를 배포하고 있었는데, 토큰 생성 가이드를 찾을 수 있었습니다.

Sonatype OSSRH 'Generation a Token' 가이드
가이드 내용은 아래와 같습니다.
먼저 https://s01.oss.sonatype.org
접속 후 로그인 합니다. 로그인 후, 우측 상단에서 Profile
페이지에 접속할 수 있고, 중간 메뉴로 User Token
메뉴를 들어갈 수 있습니다. 들어가면 Access User Token
버튼이 나옵니다.

Access User Token
버튼을 누르면, 아래 캡처와 같이 Token 기반의 새로운 username과 password가 생성됩니다. 1분 있다가 창이 자동으로 닫히게 되어있습니다. 그리고, 창이 닫히면 다시 열어보는 것이 불가능 하기 때문에 빠르게 값을 복사해두시기 바랍니다.

이제 새로 생성된 username과 password를 Github action 환경변수 설정에 넣고 테스트 해보겠습니다.
저는 OSSRH_USERNAME
, OSSRH_PASSWORD
라는 이름의 환경변수를 통해 Github Action에 값을 전달하여 배포 task를 실행시키고 있었습니다. 소스코드 문제가 아니기에, Github 레포지토리 설정에서 값을 업데이트하고 실패한 Job을 재실행할 예정입니다.



문제 해결 결과

예상과 같이 모든 배포 작업이 별도 소스 코드 수정없이 해결되었습니다. 이렇듯, User Token을 생성하고 username과 password를 수정하여 간단히 문제를 해결할 수 있었습니다.
+여담

블로그 작성을 염두에 두면서 작업을 하고 있었는데, 맥은 사진에서 글자를 읽어오는 것이 잘되어서 사실 token 원본 값을 복사 해두지 않고, 스크린샷만 찍어뒀었습니다. CI는 계속 실패 했고, 나중에 잘 보니 숫자 0이 대문자 O로, 반대로 숫자 0이 대문자 O로 인식 된 경우도 있었습니다.
최악은 바로 대문자 I와 소문자 l이었습니다. 무지성으로 수정하면서 실행하다가, 8가지 케이스 정도는 노가다를 해도 괜찮지 않을까 싶어 침착하게 2트만에 성공! 토큰 방식을 적용하실 때는 꼭 값을 복사해두시는 것을 추천드립니다...(저만 캡쳐했을 지도😅)
