图 api 没有用户的请求令牌

Graph api Request token without user

我正在尝试使用图表 API 最终自动创建 Microsoft Teams 会议,您可以在其中加入 URL。但在我这样做之前,我需要获得一个不记名令牌。因为我想在不使用用户的情况下创建会议,所以我需要使用此文档:https://docs.microsoft.com/en-us/graph/auth-v2-service。我已按照此文档进行操作,并首先在邮递员中尝试了一些但失败了,所以我尝试在 node.js 中进行操作。这是我的代码:

const fetch = require('node-fetch');
fetch("https://login.microsoftonline.com/f8cdef31-a31e-4b4a-93e4-5f571e91255a/oauth2/v2.0/token HTTP/1.1", {
    method: "POST",
    body: JSON.stringify({"client_id":"CLIENT_ID",
    "scope":"https%3A%2F%2Fgraph.microsoft.com%2F.default",
"client_secret":"CLIENT_SECRET",
"grant_type":"client_credentials"
})}).then((reposone)=>{
    console.log(reposone)
}
);

我不确定什么是机密,所以我只是将 client_id 和 client_secret 改为文字。我在“应用程序(客户端)ID”旁边的注册应用程序的概述选项卡上从 Azure 获得了 client_id。 client_secret 来自我生成机密的证书和机密选项卡。如果我使用插入的值执行此代码,我会收到 404 响应,所以我看不出我到底做错了什么。我猜我的 URL 是错误的,但我不知道它还能是什么。我从“目录(租户)ID”旁边的概览选项卡中的 url 中获得了租户 ID。

根据您的设计,您将有几个选择。

我假设您将使用“POST /me/onlineMeetings”方法。您的应用程序注册将需要 OnlineMeetings.ReadWrite 授权访问权限和 OnlineMeetings.ReadWrite.All 应用程序访问权限。您的应用程序注册还可能具有其他权限以登录用户等。

如果您选择应用程序访问,您将通过使用“client_credentials”授权类型以及您的 client_id 和 client_secret 从 V2.0 端点获取 OAuth2 访问令牌.然后,您应该能够通过提供 objectid 或 upn 而不是上面 url 中的“我”来创建 Teams 会议。

如果您选择授权访问,您最好使用已登录用户的访问令牌。但如果这不起作用,您可以通过使用“密码”授权类型以及您的 client_id 和资源所有者用户的用户名+密码来获取访问令牌。请注意,密码流不是推荐的做事方式。您可能会遇到许多问题,例如密码更改、权限更改、双因素身份验证并且它不被认为是安全的。拥有访问令牌后,您可以使用上面的 url 创建 Teams 会议。会议组织者可能是资源所有者。

原来我做错了很多事。首先,URL 是“https://login.microsoftonline.com/f8cdef31-a31e-4b4a-93e4-5f571e91255a/oauth2/v2.0/token”,而不是添加了 HTTP/1.1。其次,我的活动目录配置错误。我需要重新创建它以便我成为管理员。最后,我需要将我的应用程序配置为接收其他帐户,而不仅仅是 Microsoft 帐户,否则我无法为我的 API.

授予应用程序权限