2017-01-26 12 views
9

Github -> Settings -> Personal access tokens -> Generate new token kodunu el ile oluşturdum ve yalnızca reposcope'u seçtim.Github API'sı ile bir jeton alın

Bu belirteci iyi çalışıyor, bu yüzden kuruluşa zorladım write ayrıcalıklarına sahibim.

Daha sonra aynı (github-api numaralı bağlantıyı kullanarak bir access_token) yapmak istiyorum. Bunun sonucunda

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

Böyle json var:

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

Doğru şeyi gibidir, ama ben write ayrıcalıklara sahip kuruluş depolarda itemezsiniz. Sadece kendi repomuma girebilirim.

Yardımcı olabilir misiniz? Bir hata veya yanlışlığın nerede olduğu hakkında bir fikre açığız.

+0

Sorunuz çok belirsiz. Cevabımda iki olası çözüm yolladım. Doğru değilse, çok küçük bir ayrıntı olduğu için * gerçekten * sorunuzu güncellemeniz gerekir. –

+0

Roma, cevabıma bir göz atıp başka sorularınız olursa haberim olur mu? –

cevap

6

Eğer bunu GitHub'un API'sı üzerinden yapmak isterseniz, isteğinizin değişmesi gerekir.

Önce şöyle /authorizations endpoint kullanılarak çözülmesi gereken:

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

Bu da şöyle bir vücut ile bir 201 Created yanıtı dönmelidir: bunun dışında

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

gerçek olacaktır.

Bu, GitHub'un bir kimlik doğrulama sağlayıcısı olarak kullanılmasına izin veren uç noktayı kullanmaya çalıştığınız anlaşılıyor. Başka bir deyişle, kullanıcıların GitHub ile oturum açmasına izin veren bir uygulama oluşturuyorsunuz. Bu durumda, o zaman özellikle Web Application Flow for OAuth'u izlemeniz gerekir.

Bu durumda, yolun bir parçasısınız, ancak yanlış parametreleri gönderiyorsunuz.

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

Sonra yaptığınız isteği

olmalıdır, size POST Bundan sonra

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 

kullanmalıdır geri GitHub'dan firmasına telefon:

Önce bir GET isteği

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

Şerefe!

+0

Merhaba, burada biraz kafam karıştı. Belirli bir kapsam ile yeni bir jeton için POST isteğini yapmak için tüm kapsamları gerektirmez miydik. İlk kayıt sırasında yalnızca e-posta izninin sorulduğu bir sistem nasıl yapılır ve kullanıcı bir repo izlemeyi denediğinde, daha sonra repo kapsamı yetkilendirmesi kullanıcıdan istenir. Neyi kaçırıyorum? –