如何在没有用户的情况下获得访问权限

how to get access without a user

我正在尝试遵循此 Get access without a user to get access token. I am getting access token using API request https://login.microsoftonline.com/<-tenant-id->/oauth2/token。当我使用上面给出的第 5 步 link 我得到以下错误:

{
"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.Read写入、Sites.Read.All、User.Read、User.Read。全部并已生成秘密密钥和注册重定向 url 为: User.Read.全部.

我的问题是: 1.我在创建应用程序时做错了什么吗? 2. 为什么 link 的第 4 步不起作用? 3. 我是否使用上面给定的 api 请求获得了错误的访问权限?

在第 5 步中,它调用了 Microsoft Graph - Get a user,因此请确保您的应用在 Microsoft Graph 中具有 User.Read.All 应用程序权限(必须是 application 权限,而不是 delegated权限),添加权限后如下图(注意:不要忘记点击Grant admin consent按钮)

在您提供的文档中,它使用 v2.0 端点 /oauth2/v2.0/token,但您在问题中使用 v1.0 端点 /oauth2/token

所以请将请求 URL 更改为 /oauth2/v2.0/token,然后使用下面的请求。

请求URL:

POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token

请求正文:

client_id=xxxxxxxxxxxxxxx
&scope=https://graph.microsoft.com/.default
&client_secret=xxxxxxxxxxxxxxxx
&grant_type=client_credentials

您可以在postman.

中获取令牌

然后使用令牌调用Get a user API:

GET https://graph.microsoft.com/v1.0/users/<object-id of the user>