Forgejo・Gitea の 401「token is required」と、知らないトークンへの答え
受け付けるトークンが付いていない呼び出しに、サーバーは HTTP 401 で答えます。文言はサーバーと版で違いますが、場合は2つだけです。トークンが届いていない(token is required)か、届いたトークンをサーバーが知らない(下のほかの文言)か。どちらも権限の話ではありません。トークンは有効でも権限(スコープ)が足りないときは、403 の「token does not have at least one of required scope(s)」になります。
サーバーごとの文言
2026年10月24日に、codeberg.org(Forgejo 16.0.0-dev)・code.forgejo.org(Forgejo 17.0.0-dev)・gitea.com(Gitea 29.0.0-dev)の /api/v1/user へ、トークンなしと、でたらめなトークン付きで1回ずつ問い合わせました。書いてある版については、ソースコードも同じ文言です。
- トークンなし(どの版も):
{"message": "token is required", "url": "https://codeberg.org/api/swagger"}(Gitea の routers/api/v1/api.go、Forgejo の req_token.go)。 - 知らないトークン・Forgejo 16 と 17(Codeberg・code.forgejo.org):サーバーが試したサインインの方法ごとに1行ずつ、何行かの文。その中に
access token does not exist [sha: …]があります。 - 知らないトークン・Gitea 1.26 以降(1.26・1.27・28.x・gitea.com):
invalid username, password or token。 - 知らないトークン・Gitea 1.25 以前と Forgejo 11:
user does not exist [uid: 0, name: ]。トークンが見つからず、したがってユーザーも見つからないので、ユーザー 0 と書いています(Gitea の v1.21.0〜v1.25.0 と Forgejo の v11.0.0 の services/auth/oauth2.go。公開の報告)。自分のアカウントが消えたという意味ではありません。
トークンだけを確かめるには:
curl -i -H "Authorization: token your-token" "https://codeberg.org/api/v1/user"
受け付けられるトークンなら、200 で自分のアカウントが返ります。自社のサーバーなら codeberg.org の代わりにその住所で。
「token is required」
トークンがサーバーに届いていません。公開リポジトリはトークンなしで読めますが、非公開のリポジトリ、自分のプルリクとレビュー依頼、何かを変える操作にはトークンが要ります。トークンを付けたのにこう言われるなら、途中で外されています。Forgejo や Gitea の前にあるプロキシやサーバーが Authorization ヘッダーを落とすと、同じ答えになります。
サーバーが知らないトークン
- Applications の画面で削除された。
- 打ち間違えたか、貼り付けで切れた。
- 別のサーバーで作った。Codeberg のトークンは自社の Forgejo や Gitea のサーバーでは通じず、その逆も同じです。
新しいトークンを作る
- 自分のアイコン → Settings → Applications(住所はサーバーの
/user/settings/applications。例:https://codeberg.org/user/settings/applications)。 - Access tokens の Generate new token:名前、Repository and organization access、Select permissions で前と同じまとまり(プルリクの道具に要る権限)。
- Generate token を押してコピーする。サーバーは、もう表示しないと書いています。
- 古いトークンを入れていた所すべてに入れる。作ったのと同じサーバーの設定に。
IntelliJ IDEA で Forgejo・Gitea のプルリクを見るなら
Lesstep の Pull Request Inbox for Forgejo and Gitea は、JetBrains IDE(2024.1 以降)のプラグインです。Codeberg 用と自社のサーバー用にトークンを1つずつ持ち、どちらも IDE のパスワード保管庫に入れて、それぞれのサーバーにだけ送ります。トークンなしでは公開リポジトリを読み、非公開のリポジトリではアクセストークンが要ると言います。サーバーが 401 でトークンを断ったときは、サーバーがトークンを受け付けなかった(期限切れか削除か、別のサーバーのもの)と言い、サーバーの文を添えて、設定を開けるようにします。設定には、お使いのサーバーのトークンのページへのリンクがあります。読むのは無料、承認・コメント・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
このページは Forgejo プロジェクト・Codeberg e.V.・Gitea プロジェクト・JetBrains のいずれとも提携しておらず、推奨・承認も受けていません。Forgejo・Gitea・Codeberg はそれぞれの持ち主の名前、IntelliJ IDEA は JetBrains s.r.o. の商標です。
ほかに:「token does not have at least one of required scope(s)」 · 404「The target couldn't be found.」「not found」 · Forgejo・Gitea のマージの断り(405・409) · Forgejo・Gitea のレビューの断り(422) · Forgejo・Gitea のブランチの更新の断り(403・409・422) · Forgejo・Gitea のプルリクが作れない(409・422・403) · Forgejo・Gitea のコメントの断り(403・422・400) · Forgejo・Gitea の検索の断り(400・422) · Forgejo・Gitea のプルリクの変更ファイル(50件ずつ・changed_files) · JetBrains の IDE で Forgejo・Gitea のプルリクを扱う · English