質問: GitHub API で Organization の private member の情報を取得したいのですが、OAuth 認証で得られたアクセストークンを用いた取得は何故か失敗してしまいます。私はとある団体に属しており、その団体の専用アプリを作っています。アプリの使用ユーザが GitHub 上の Organization(団体) の member に属しているかどうかの確認をしたいのです。 そのため、下記の手順を実行しました。 1. GitHub API を使って OAuth 認証を行いユーザのアクセストークンを取得する 2. アクセストークンで認証したユーザの[ユーザー名]を取得する 3. [ユーザ名]が団体に属しているかを確認するコマンドを実行する 手順1でアクセストークンには scope で以下の権限を与えました。 read:org (組織、チーム、メンバーシップへの読み取り専用アクセス。) read:user (ユーザーのプロファイルデータを読み取るためのアクセスを許可します。) ![scope](https://i.stack.imgur.com/pET0e.jpg) 手順3で下記のコマンドに自分のユーザ名とアクセストークンを挿入して実行したところステータスコード「302」を返されました。 ``` curl --user "[私のユーザ名]:[私のアクセストークン]" -s https://api.github.com/orgs/[団体名]/members/[ユーザ名] -o /dev/null -w "%{http_code}\n" ``` GitHub API の公式ドキュメントによると > > > > Status: 204 No Content リクエスタが組織メンバであり、ユーザがメンバである場合の応答 > > Status: 302 Found リクエスタが組織メンバーでない場合の応答 > > > 私は組織メンバーではないと返されてしまいました。しかしリクエスタの私は確かに当団体の private member です。(public member ではありません)実際に、アクセストークンを使わず、パスワードの基本認証を用いて下記コマンドを実行すると、ステータスコードは「204」に変化します。下記のコマンドです。 ``` curl --user "[私のユーザ名]:[私のパスワード]" -s https://api.github.com/orgs/[団体名]/members/[私のユーザ名] -o /dev/null -w "%{http_code}\n" ``` アクセストークンで全メンバーの情報を取得できるかを確認するため下記のコマンドを実行してみたところ public member しか取得できていませんでした。私は private member なので「302」を返された原因はこれのようです・ ``` curl --user "[私のユーザ名]:[アクセストークン]" https://api.github.com/orgs/[団体名]/members ``` 何故[read:org][read:user]を許可したアクセストークンでは org の private member の情報を取得できないのかがわかりません。他に許可しなければならない scope があるのでしょうか? GitHubのデベロッパーをずっと眺めていますがわかりません。もしこの現象の原因を教えていただけたら幸いです。
回答: GitHub の設定 > アプリケーション で当該アプリを選択し、その Organization にチェックが入っているかを確認してみてください。アプリ側と org の間にも権限が必要かもしれません。 *この投稿は @hinaloe さんのコメント および @頑張ります さんのコメント 内容を元に コミュニティwiki として投稿しました。*