How can I get an oauth2 access_token using Python
Solution 1
I was finally able to get it done
This is the code I used:
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
Solution 2
Before using it, you need to pip install requests
import requests
def get_access_token(url, client_id, client_secret):
response = requests.post(
url,
data={"grant_type": "client_credentials"},
auth=(client_id, client_secret),
)
return response.json()["access_token"]
get_access_token("https://api.example.com/access_token", "abcde", "12345")
Solution 3
Simply (in case of Facebook Authentication):
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"]
Or you can use rauth library.
In the docs there is an interesting example with facebook oAuth2 authentication:
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/')
and after open a session:
session = facebook.get_auth_session(data={'code': 'foo','redirect_uri': redirect_uri})
in the session json there is your access token
Johan Vergeer
Updated on October 13, 2021Comments
-
Johan Vergeer over 2 years
For a project someone gave me this data that I have used in Postman for testing purposes:
In Postman this works perfectly.
Auth URL: https://api.example.com/oauth/access_token
Access Token URL: https://api.example.com/access_token
client ID: abcde
client secret: 12345
Token name: access_token
Grant type: Client CredentialsAll I need is to get back the access token.
Once, I got the access token I can continue.
I have already tried several Python packages and some custom code, but somehow this seemingly simple task starts to create a real headache.
One exemple I tried:
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"]
Then I have got this one:
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"]
If this would work, what should I put into the
code
parameterI really hope someone can help me out here.
Thanks in advance.
-
Rhyuk over 7 yearsCan you please explain your code a little bit? I can't seem to get it to work. Thanks in advance!
-
user1655072 over 5 yearscan someone explain what is the 'bar' under 'code'? Some random string? some kind of url?
-
Jamieson Rhyne almost 5 yearsIs this using the rauth library?
-
DUDANF almost 5 yearsCould you please explain your code/provide a complete answer? What library have you used? What is "bar"?
-
liang almost 4 yearslast commit for rauth library is in 2015, is this library still maintained?
-
EnE_ almost 4 yearsI would say no. Try 'oauthlib' which seems popular enough and had a commit 9 days ago (07-Aug-2020)