首页 > 解决方案 > 没有用户的图形 api 请求令牌

问题描述

我正在尝试使用图形 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 响应,所以我看不出我到底做错了什么。我猜我的网址是错误的,但我不知道还有什么可能。我从“目录(租户)ID”旁边的概述选项卡中获得了 url 中的租户 ID。

标签: node.jsoauth-2.0microsoft-graph-apimicrosoft-teamsmicrosoft-graph-teams

解决方案


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

我假设您将使用“POST /me/onlineMeetings”方法。您的应用注册将需要 OnlineMeetings.ReadWrite 权限以进行委派访问,并需要 OnlineMeetings.ReadWrite.All 以进行应用程序访问。您的应用注册可能还具有登录用户等的额外权限。

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

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


推荐阅读