我想使用这个库与我的AD - https://github.com/microsoftgraph/microsoft-graph-docs/blob/master/concepts/nodejs.md的图形API进行交互
但是,我发现返回访问令牌的所有现有javascript库都希望传入返回URL,以及其他一些特定于Web的东西,这让我相信这是微软的一些要求。
有没有什么好方法可以在运行后端节点脚本时验证/接收访问令牌(没有任何与Web相关的内容),以便我可以开始对Microsoft Graph API进行调用?提前感谢您的建议。
要运行连接到Graph API的后端非用户身份验证守护程序,您需要使用仅限应用程序的身份验证流程。以下是the official steps的快速摘要:
yourtenant.onmicrosoft.com
名称,并将此值复制下来。Azure Active Directory
刀片的App Registrations
部分注册应用程序,而不是直接在租户属性中注册。复制Application ID
;我们以后会需要的。Save
,然后点击Grant Permissions
按钮。login.microsoftonline.com
域发出HTTP请求以获取访问令牌。Here's a link to Microsofts Node.js example,这里是HTTP调用中direct documentation的链接,用于检索访问令牌。这是一个超级精简的示例,它将输出检索到的访问令牌。替换[Tenant]
,[ApplicationID]
和[Key]
值:
const request = require("request");
const endpoint = "https://login.microsoftonline.com/[Tenant].onmicrosoft.com/oauth2/token";
const requestParams = {
grant_type: "client_credentials",
client_id: "[ApplicationID]",
client_secret: "[Key]",
resource: "https://graph.windows.net"
};
request.post({ url:endpoint, form: requestParams }, function (err, response, body) {
if (err) {
console.log("error");
}
else {
console.log("Body=" + body);
let parsedBody = JSON.parse(body);
if (parsedBody.error_description) {
console.log("Error=" + parsedBody.error_description);
}
else {
console.log("Access Token=" + parsedBody.access_token);
}
}
});
一旦我们有了access_token,我们就可以调用Graph API。假设应用程序权限已正确配置并从步骤#4应用,我们可以开始制作图谱API请求:
function testGraphAPI(accessToken) {
request.get({
url:"https://graph.windows.net/[Tenant]/users?api-version=1.6",
headers: {
"Authorization": accessToken
}
}, function(err, response, body) {
console.log(body);
});
}
BU0的答案对我来说无法正常工作,因为微软改变了他们使用图形API的方式,因此我无法获得所需的所有数据。这是我如何使用BU0答案和这个tutorial做到的:
const request = require("request");
const endpoint = "https://login.microsoftonline.com/[Tenant]/oauth2/v2.0/token";
const requestParams = {
grant_type: "client_credentials",
client_id: "[ApplicationID]",
client_secret: "[Key]",
scope: "https://graph.microsoft.com/.default"
};
request.post({ url:endpoint, form: requestParams }, function (err, response, body) {
if (err) {
console.log("error");
}
else {
console.log("Body=" + body);
let parsedBody = JSON.parse(body);
if (parsedBody.error_description) {
console.log("Error=" + parsedBody.error_description);
}
else {
console.log("Access Token=" + parsedBody.access_token);
}
}
});
function testGraphAPI(accessToken) {
request.get({
url:"https://graph.microsoft.com/v1.0/users",
headers: {
"Authorization": "Bearer " + accessToken
}
}, function(err, response, body) {
console.log(body);
});
}