[PDB Tech] OAuth client application help request: cannot get user profile
Bartosz Miklaszewski
bartosz at miklaszewski.com
Mon Jun 26 14:36:56 PDT 2023
Hi,
I am struggling with this for a while, maybe someone would be abloe to help.
In short, i try use flask with oauth but failed on getting token back, moved to django, and I was able to pass token.
Now I am receiving token and try to request user profile, but getting Resposne 403
cant figure out why,
My code:
from django.shortcuts import render
from django.http import HttpRequest, HttpResponse, JsonResponse
from django.shortcuts import redirect
import requests
# Create your views here.
redirect_url_peeringdb = 'https://auth.peeringdb.com/oauth2/authorize/auth?response_type=code&client_id=<client_id>&redirect_uri=https://localhost:8000/oauth2/login/redirect&scope=email&state=1234zyx'
client_id = "<client_id>"
client_secret = "<client_secret>"
def home(request: HttpRequest) -> JsonResponse:
return JsonResponse({ "msg": "Hello World" })
def peeringdb_login(request: HttpRequest):
return redirect(redirect_url_peeringdb)
def peeringdb_login_redirect(request: HttpRequest):
code = request.GET.get('code')
print("### 1 ### code: ", code)
user = exchange_code(code)
print("### 2 ### email: ", user)
return JsonResponse({ "user": user})
def exchange_code(code: str):
print("### 3 ### code: ", code)
data = {
"client_id": "<client_id>",
"client_secret": "<client_secret>",
"grant_type": "authorization_code",
"code": code,
"redirect_uri": "https://localhost:8000/oauth2/login/redirect",
"scope": "email"
}
headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
response = requests.post("https://auth.peeringdb.com/oauth2/token/", data=data, headers=headers)
print("### 4 ### response: ", response)
print("### 5 ### response.json: ", response.json())
credentials = response.json()
print("### 6 ### credentials: ", credentials)
access_token = credentials['access_token']
print("### 7 ### access_token: ", access_token)
response1 = requests.get("https://auth.peeringdb.com/profile/v1", headers={
"Authorization": "Bearer %s" % access_token
})
print("### 8 ### response1: ", response1)
print("### 9 ### response1: ", response1.json())
user = response1.json()
print("### 10 ### user: ", user)
i am getting error:
127.0.0.1 - - [26/Jun/2023 21:21:16] "GET /oauth2/login HTTP/1.1" 302 -
### 1 ### code: <code>
### 3 ### code: <code>
### 4 ### response: <Response [200]>
### 5 ### response.json: {'access_token': '<access_token>', 'expires_in': 36000, 'token_type': 'Bearer', 'scope': 'email', 'refresh_token': '<refresh_token>'}
### 6 ### credentials: {'access_token': '<access_token>', 'expires_in': 36000, 'token_type': 'Bearer', 'scope': 'email', 'refresh_token': '<refresh_token>'}
### 7 ### access_token: <access_token>
### 8 ### response1: <Response [403]>
127.0.0.1 - - [26/Jun/2023 21:21:17] "GET /oauth2/login/redirect?code=<code>&state=1234zyx HTTP/1.1" 500 -
Traceback (most recent call last):
File "/Users/miklab01/Library/Python/3.9/lib/python/site-packages/requests/models.py", line 971, in json
return complexjson.loads(self.text, **kwargs)
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/json/__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
any one have idea where i am missing something?
i think issue might be with the url i send and autorization... ?
https://auth.peeringdb.com/profile/v1/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.peeringdb.com/pipermail/pdb-tech/attachments/20230626/2a3672be/attachment-0001.htm>
More information about the Pdb-tech
mailing list