web-dev-qa-db-fra.com

Obtenir un jeton par l'API Github

J'ai créé manuellement un jeton dans Github -> Settings -> Personal access tokens -> Generate new token et choisi uniquement reposcope

Ce jeton fonctionne bien, alors je peux y accéder. J'ai les privilèges write.

Alors je veux faire la même chose (obtenir un access_token) par github-api.

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="") 

En conséquence, j'ai une telle variable json:

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

C’est comme si tout était correct, mais je ne peux pas accéder aux comptes d’organisation contenant des privilèges write. Je ne peux pousser que dans mon propre dépôt.

Pourriez-vous aider? Toute idée d’erreur ou d’inexactitude est la bienvenue.

11

Donc, si vous voulez faire cela via l'API de GitHub, votre demande doit changer.

Vous devez d’abord utiliser le point de terminaison /authorizations like so:

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",
}

Cela devrait alors renvoyer une réponse 201 Created avec un corps comme ceci:

{
  "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"
}

Sauf que ce sera réel.

Cela dit, il semble que vous essayez d'utiliser le noeud final qui permet à GitHub d'être utilisé en tant que fournisseur d'authentification. En d'autres termes, vous construisez une application qui permet aux utilisateurs de se connecter à GitHub. Si tel est le cas, vous devez suivre spécifiquement le flux d'applications Web pour OAuth .

Dans ce cas, vous faites partie du chemin mais vous envoyez les mauvais paramètres.

D'abord, vous faites une demande GET:

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

Ensuite, vous recevrez des données de GitHub que vous devrez utiliser dans votre POST

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

Après cela, toute demande que vous faites doit avoir

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

À votre santé!

9

utilisez POST avec l'url https://api.github.com/authorizations en passant votre client_id et client_secret dans le Autorisation d'autorisation de base . Envoyez les paramètres restants au format JSON dans le corps brut.
par exemple.:

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