Github -> Settings -> Personal access tokens -> Generate new token
で手動でトークンを作成し、repo
scope
のみを選択しました。
このトークンは正常に機能するため、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
特権を持っている組織のリポジトリにプッシュすることはできません。自分のリポジトリにのみプッシュできます。
手伝ってくれる?間違いや不正確な点は大歓迎です。
したがって、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"
}