Pour un projet, quelqu'un m'a donné les données que j'ai utilisées dans Postman à des fins de test:
Dans Postman cela fonctionne parfaitement.
URL d'authentification: https://api.example.com/oauth/access_token
URL du jeton d'accès: https://api.example.com/access_token
ID client: abcde
secret client: 12345
Nom du jeton: access_token
Type de subvention: Informations d'identification du client
Tout ce dont j'ai besoin est de récupérer le jeton d'accès.
Une fois, j'ai reçu le jeton d'accès, je peux continuer.
J'ai déjà essayé plusieurs packages Python et du code personnalisé, mais cette tâche apparemment simple commence à créer un véritable casse-tête.
Un exemple que j'ai essayé:
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"]
Ensuite, j'ai celui-ci:
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"]
Si cela fonctionne, que devrais-je mettre dans le paramètre code
J'espère vraiment que quelqu'un pourra m'aider ici.
Merci d'avance.
J'ai finalement pu le faire
C'est le code que j'ai utilisé:
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
Simplement (en cas d'authentification 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"]
Ou vous pouvez utiliser bibliothèque rauth .
Dans le docs il y a un exemple intéressant avec l'authentification 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/')
et après l'ouverture d'une session:
session = facebook.get_auth_session(data={'code': 'foo','redirect_uri': redirect_uri})
dans la session json il y a votre jeton d'accès