2017-01-26 13 views
9

द्वारा एक टोकन प्राप्त करें मैंने मैन्युअल रूप से 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 विशेषाधिकार होना संगठन रेपोस में धक्का नहीं कर सकते हैं। मैं केवल अपने खुद के repos में धक्का दे सकते हैं।

क्या आप मदद कर सकते हैं? कोई विचार जहां गलती या गलतता है, स्वागत है।

+0

आपका प्रश्न बहुत अस्पष्ट है। मैंने अपने जवाब में दो संभावित समाधान पोस्ट किए हैं। यदि वे सही नहीं हैं, तो आपको * वास्तव में * अपने प्रश्न को अपडेट करने की आवश्यकता होगी क्योंकि बहुत कम जानकारी है। –

+0

रोमा, क्या आप मेरे उत्तर को देख सकते हैं और यदि आपके कोई अन्य प्रश्न हैं तो मुझे बताएं? –

उत्तर

6

तो यदि आप गिटहब के एपीआई के माध्यम से ऐसा करना चाहते हैं, तो आपके अनुरोध को बदलने की जरूरत है।

सबसे पहले आप /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 की अनुमति देता है एक प्रमाणीकरण प्रदाता के रूप में इस्तेमाल किया जा करने के लिए उपयोग करने के लिए कोशिश कर रहे हैं। दूसरे शब्दों में, आप एक ऐसा एप्लिकेशन बना रहे हैं जो उपयोगकर्ताओं को गिटहब के साथ साइन-इन करने की अनुमति देता है। यदि ऐसा है, तो आपको विशेष रूप से Web Application Flow for OAuth का पालन करना होगा।

उस स्थिति में, आप वहां के रास्ते का हिस्सा हैं लेकिन आप गलत पैरामीटर भेज रहे हैं।

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

तो फिर तुम, डेटा 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 

उसके बाद का उपयोग करना चाहिए प्राप्त होगा किसी भी अनुरोध करने के

होना चाहिए:

सबसे पहले आप एक GET अनुरोध भेजना

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

चीयर्स!

+0

हाय, मैं यहाँ थोड़ा उलझन में हूँ। एक विशिष्ट दायरे के साथ एक नए टोकन के लिए POST अनुरोध करने के लिए हमें सभी क्षेत्रों की आवश्यकता नहीं होगी। कोई ऐसा सिस्टम कैसे बना सकता है जहां पहले साइन अप के दौरान केवल ईमेल अनुमति मांगी जाए और कहें कि जब उपयोगकर्ता रेपो देखने की कोशिश करता है तो उपयोगकर्ता से रेपो स्कोप प्राधिकरण से पूछा जाता है। मैं क्या खो रहा हूँ? –