我正在尝试遵循此Get access without a user来获取访问令牌。我正在使用API请求 https://login.microsoftonline.com/ <-tenant-id-> / oauth2 / token 获得访问令牌。当我对上面给定的链接使用步骤5时,出现以下错误:
{
"error": {
"code": "InvalidAuthenticationToken",
"message": "Access token validation failure. Invalid audience.",
"innerError": {
"request-id": "e9e9820e-2a3f-411a-bc77-760c9369fc8f",
"date": "2020-01-02T06:17:41"
}
}
}
我已经注册了具有以下权限的应用:Calendars.Read,Calendars.ReadWrite,Sites.Read.All,User.Read,User.Read.All,并已生成秘密密钥,并将重定向URL注册为: User.Read.All。
我的问题是: 1.在创建应用程序时我做错了什么吗? 2.为什么第4步的链接无效? 3.使用上述给定的api请求是否获得了错误的访问权限?
答案 0 :(得分:2)
在第5步中,它将调用Microsoft Graph-Get a user
,因此请确保您的应用具有Microsoft Graph中的User.Read.All
应用许可(必须为application
许可,而不是{{1 }}权限),添加权限后,如下所示(注意:请不要忘记单击“授予管理员同意”按钮)
在您提供的文档中,它使用v2.0端点delegated
,但在问题中使用v1.0端点/oauth2/v2.0/token
。
因此,请将请求URL更改为/oauth2/token
,然后使用下面的URL。
请求网址:
/oauth2/v2.0/token
请求正文:
POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
您可以在postman中获得令牌。
然后使用令牌调用Get a user
API:
client_id=xxxxxxxxxxxxxxx
&scope=https://graph.microsoft.com/.default
&client_secret=xxxxxxxxxxxxxxxx
&grant_type=client_credentials