the following code fails with “InvalidAuthenticationToken”
<code>{"error":{"code":"InvalidAuthenticationToken","message":"Access token validation failure. Invalid audience."
</code>
<code>{"error":{"code":"InvalidAuthenticationToken","message":"Access token validation failure. Invalid audience."
</code>
{"error":{"code":"InvalidAuthenticationToken","message":"Access token validation failure. Invalid audience."
I’m sure I’ve got the app registration in azure ad correct.
<code>import urllib.parse
import requests
from requests_toolbelt.utils.dump import dump_all
tenant_id = "..."
client_secret = "..."
client_id = ".."
scope = "api://<guidfromzurehere/.default"
url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"
data = {
"client_id": client_id,
"scope": scope,
"client_secret": client_secret,
"grant_type": "client_credentials"
}
r = requests.post(url, data=data, headers={"Content-Type": "application/x-www-form-urlencoded"})
print(dump_all(r).decode('utf8'))
print(r.json()['access_token'])
url = "https://graph.microsoft.com/v1.0/users/myemailaddress/onenote/notebooks"
headers = {"Authorization": "Bearer " + r.json()['access_token']}
r = requests.get(url, headers=headers)
print(dump_all(r).decode('utf8'))
</code>
<code>import urllib.parse
import requests
from requests_toolbelt.utils.dump import dump_all
tenant_id = "..."
client_secret = "..."
client_id = ".."
scope = "api://<guidfromzurehere/.default"
url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"
data = {
"client_id": client_id,
"scope": scope,
"client_secret": client_secret,
"grant_type": "client_credentials"
}
r = requests.post(url, data=data, headers={"Content-Type": "application/x-www-form-urlencoded"})
print(dump_all(r).decode('utf8'))
print(r.json()['access_token'])
url = "https://graph.microsoft.com/v1.0/users/myemailaddress/onenote/notebooks"
headers = {"Authorization": "Bearer " + r.json()['access_token']}
r = requests.get(url, headers=headers)
print(dump_all(r).decode('utf8'))
</code>
import urllib.parse
import requests
from requests_toolbelt.utils.dump import dump_all
tenant_id = "..."
client_secret = "..."
client_id = ".."
scope = "api://<guidfromzurehere/.default"
url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"
data = {
"client_id": client_id,
"scope": scope,
"client_secret": client_secret,
"grant_type": "client_credentials"
}
r = requests.post(url, data=data, headers={"Content-Type": "application/x-www-form-urlencoded"})
print(dump_all(r).decode('utf8'))
print(r.json()['access_token'])
url = "https://graph.microsoft.com/v1.0/users/myemailaddress/onenote/notebooks"
headers = {"Authorization": "Bearer " + r.json()['access_token']}
r = requests.get(url, headers=headers)
print(dump_all(r).decode('utf8'))
Is my scope wrong? I’ve tried a scope of “https://graph.microsoft.com/.default”, but the I get a license error. Suggestions?