web-dev-qa-db-ja.com

Github APIでトークンを取得する

Github -> Settings -> Personal access tokens -> Generate new tokenで手動でトークンを作成し、reposcopeのみを選択しました。

このトークンは正常に機能するため、write権限を持つ組織にプッシュできます。

次に、github-apiで同じことをしたい(access_tokenを取得)。

params = dict(client_id=client_id,
              client_secret=client_secret,
              code=code)

url = url_concat("https://github.com/login/oauth/access_token", params)

req = HTTPRequest(url,
                  method="POST",
                  headers={"Accept": "application/json"},
                  body="") 

その結果、私はそのようなjsonを持っています:

{
    'scope': 'repo',
    'token_type': 'bearer',
    'access_token': 'xxxxxxxx10755fbb6c281e92902ed122144886c5'
}

それはすべて正しいのですが、私がwrite特権を持っている組織のリポジトリにプッシュすることはできません。自分のリポジトリにのみプッシュできます。

手伝ってくれる?間違いや不正確な点は大歓迎です。

14

したがって、GitHubのAPIを使用してこれを行う場合は、リクエストを変更する必要があります。

最初に /authorizations endpoint を次のように使用する必要があります:

POST /authorizations
Authorization: Basic ...
Content-Type: application/json
Content-Length: ...

{
  "scopes": [
    "repo",
    "write:org"
  ],
  "note": "Example from StackOverflow by @sigmavirus24",
  "client_id": "Your client_id here",
  "client_secret": "Your client_secret here",
  "fingerprint": "1234",
}

これにより、次のような本文を含む201 Created応答が返されます。

{
  "id": 72249124,
  "url": "https://api.github.com/authorizations/72249124",
  "scopes": [
    "repo",
    "write:org"
  ],
  "token": "abcdefgh12345678",
  "token_last_eight": "12345678",
  "hashed_token": "25f94a2a5c7fbaf499c665bc73d67c1c87e496da8985131633ee0a95819db2e8",
  "app": {
    "url": "http://my-github-app.com",
    "name": "my github app",
    "client_id": "abcde12345fghij67890"
  },
  "note": "optional note",
  "note_url": "http://optional/note/url",
  "updated_at": "2017-02-08T20:39:23Z",
  "created_at": "2017-02-08T17:26:27Z",
  "fingerprint": "1234"
}

それは本物になります。

つまり、GitHubを認証プロバイダーとして使用できるようにするエンドポイントを使用しようとしているようです。つまり、ユーザーがGitHubを使用してサインインできるアプリケーションを構築しています。その場合は、具体的に OAuthのWebアプリケーションフロー に従う必要があります。

その場合、あなたはその方法の一部ですが、間違ったパラメーターを送信しています。

まず、GETリクエストを作成します。

GET https://github.com/login/oauth/authorize?client_id=<your-client_id>&scopes=repo%20write:org&state=something-random

次に、POSTで使用する必要があるデータをGitHubから受け取ります。

POST https://github.com/login/oauth/access_token?client_id=<your-client_id>&client_secret=<your-client_secret>&code=<code-from-github>
Accept: application/json

その後、あなたがするどんな要求も持っている必要があります

Authorization: token <token-received-in-response-to-POST>

乾杯!

POST with the URL https://api.github.com/authorizations を使用してclient_idおよびclient_secret inBasic Auth of Authorization残りのパラメーターをjson形式で本文としてrawとして送信します。
例えば。:

{
  "scopes": 
    [
      "repo",
      "write:org"
    ],
  "note": "Sample Access Token using API Call",
  "fingerprint": "DEMO#$12@A"
}
1
SuKu