2016-04-19 21 views
3

對於一個項目的人給了我這個數據,我在郵差已經用於測試目的:我怎樣才能得到的oauth2的access_token使用Python

在郵差這個完美的作品。

驗證網址:https://api.example.com/oauth/access_token
訪問令牌網址:https://api.example.com/access_token
客戶端ID:ABCDE
客戶端的祕密:12345
令牌名稱:的access_token
格蘭特類型:客戶端憑證

所有我需要找回是訪問令牌。

一個我得到了訪問令牌,我可以繼續。

我已經嘗試了幾個Python包和一些自定義代碼,但不知何故,這個看似簡單的任務開始創建一個真正的頭痛。

一爲例我想:

import httplib 
import base64 
import urllib 
import json 

def getAuthToken(): 
    CLIENT_ID = "abcde" 
    CLIENT_SECRET = "12345" 
    TOKEN_URL = "https://api.example.com/oauth/access_token" 

    conn = httplib.HTTPSConnection("api.example.com") 

    url = "/oauth/access_token" 

    params = { 
     "grant_type": "client_credentials" 
    } 

    client = CLIENT_ID 
    client_secret = CLIENT_SECRET 

    authString = base64.encodestring('%s:%s' % (client, client_secret)).replace('\n', '') 

    requestUrl = url + "?" + urllib.urlencode(params) 

    headersMap = { 
     "Content-Type": "application/x-www-form-urlencoded", 
     "Authorization": "Basic " + authString 
    } 

    conn.request("POST", requestUrl, headers=headersMap) 

    response = conn.getresponse() 

    if response.status == 200: 
     data = response.read() 
     result = json.loads(data) 

     return result["access_token"] 

然後我有這樣一條:

import requests 
import requests.auth 

CLIENT_ID = "abcde" 
CLIENT_SECRET = "12345" 
TOKEN_URL = "https://api.example.com/oauth/access_token" 
REDIRECT_URI = "https://www.getpostman.com/oauth2/callback" 

def get_token(code): 
    client_auth = requests.auth.HTTPBasicAuth(CLIENT_ID, CLIENT_SECRET) 
    post_data = {"grant_type": "client_credentials", 
       "code": code, 
       "redirect_uri": REDIRECT_URI} 
    response = requests.post(TOKEN_URL, 
          auth=client_auth, 
          data=post_data) 
    token_json = response.json() 
    return token_json["access_token"] 

如果這樣的工作,我應該怎麼投入code參數

我真的希望有人可以幫助我在這裏。

在此先感謝。

回答

2

我終於能夠把它做

這是我使用的代碼:

class ExampleOAuth2Client: 
    def __init__(self, client_id, client_secret): 
     self.access_token = None 

     self.service = OAuth2Service(
      name="foo", 
      client_id=client_id, 
      client_secret=client_secret, 
      access_token_url="http://api.example.com/oauth/access_token", 
      authorize_url="http://api.example.com/oauth/access_token", 
      base_url="http://api.example.com/", 
     ) 

     self.get_access_token() 

    def get_access_token(self): 
     data = {'code': 'bar', 
       'grant_type': 'client_credentials', 
       'redirect_uri': 'http://example.com/'} 

     session = self.service.get_auth_session(data=data, decoder=json.loads) 

     self.access_token = session.access_token 
+1

燦你請稍微解釋一下你的代碼?我似乎無法得到它的工作。提前致謝! – Rhyuk

0

簡單(在Facebook的身份驗證的情況下):

import requests, json 

access_token = requests.get("https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id=your_client_id&client_secret=your_client_secret").json()["access_token"] 

或者你可以使用rauth library

docs有與Facebook的oauth2驗證一個有趣的例子:

from rauth import OAuth2Service 

facebook = OAuth2Service(
client_id='your_client_id', 
client_secret='your_client_secret', 
name='facebook', 
authorize_url='https://graph.facebook.com/oauth/authorize', 
access_token_url='https://graph.facebook.com/oauth/access_token', 
base_url='https://graph.facebook.com/') 

和開放的會議後:

session = facebook.get_auth_session(data={'code': 'foo','redirect_uri': redirect_uri}) 

會話JSON有你的訪問令牌