J'ai créé manuellement un jeton dans Github -> Settings -> Personal access tokens -> Generate new token
et choisi uniquement repo
scope
.
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.
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é!
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"
}