NodeJS Web app Access Azure REST API 身份验证失败



>我正在尝试创建一个示例 NodeJS 应用程序,我将在其中调用 Azure Log Analytics REST API,并且我已经完成了应用程序注册,但我不是 Node JS 开发人员,不幸的是卡在这里,我从一些搜索中得到了一些代码,但这根本不起作用,有人可以帮我如何从 NodeJs 获取身份验证令牌(我刚刚创建了一个示例快速 NodeJs 应用程序并粘贴了以下代码(但它不起作用,如果有人可以帮助我修复代码:

var express = require('express');
const axios = require('axios');
const qs = require('qs');
const APP_ID = 'XXXXXXXXXXXXXXXXXXX';
const APP_SECERET = 'YYYYYYYYYYYYYYYYY';
const TOKEN_ENDPOINT ='https://login.microsoftonline.com/MYTENANTID/oauth2/v2.0/token';
const MS_GRAPH_SCOPE = 'Data.Read';
const resource ='GUID FOR LOG ANALYTICS WORKSPACE';
var responseval = "";

const postData = {
client_id: APP_ID,
scope: MS_GRAPH_SCOPE,
client_secret: APP_SECERET,
grant_type: 'client_credentials',
resource: resource
};
axios.defaults.headers.post['Content-Type'] =
'application/x-www-form-urlencoded';
let token = '';
axios
.post(TOKEN_ENDPOINT, qs.stringify(postData))
.then(response => {
console.log(response.data);
responseval = response.data;
})
.catch(error => {
console.log(error);
responseval = error;
});
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express ' + responseval });
});
module.exports = router;

以下是我正在尝试在NODE中工作的工作POWERSHELL代码。Js

$tenantId      = "MYTENANT ID"  #Directory ID for THREE PROJECT


$formData = @{
client_id = "XXXXXXXXXXXXXX";
client_secret = "YYYYYYYYYYYYYYYYYYYY";
scope = 'Data.Read';
grant_type = 'client_credentials';
resource = 'https://api.loganalytics.io'
}

$uri = 'https://login.microsoftonline.com/' + $tenantId + '/oauth2/token?api-version=1.0'
$response = Invoke-RestMethod -Uri $uri -Method Post -Body $formData -ContentType "application/x-www-form-urlencoded"
$authHeader = @{
'Content-Type'='application/json'
'Authorization'= 'Bearer ' + $response.access_token
}
$request1 = "https://api.loganalytics.io/v1/workspaces/LOGANALYTICS WORKSPACE ID/query?query=externalapistatus_CL "
$resultz1 = Invoke-RestMethod -Uri $request1 `
-Headers $authHeader `
-Method Get

你只是在编写一个http控制台客户端,所以你不需要express。也许使用这个库。

对于最简单的代码,在索引.js文件中使用这样的自执行函数 - 然后只需运行"npm start">

const axios = require('axios');
const oauth = require('axios-oauth-client');
(async () => {
const getClientCredentials = oauth.client(axios.create(), {
url: 'https://oauth.com/2.0/token',
grant_type: 'client_credentials',
client_id: 'foo',
client_secret: 'bar',
scope: 'baz'
});
const auth = await getClientCredentials(); // => { "access_token": "...", "expires_in": 900, ... }
})();

经过一些基本的基础知识收集 感谢 Node.JsTutorial 通过编程与@Mosh(Youtube Node.js 基础教程(,我能够让它工作。我按照上面的@Gary的建议构建了一个简单的控制台 Node.Js 应用程序,以下是现在返回令牌的代码(现在的下一步是将其放入函数并在 web-App 中使用它(:-

const axios = require('axios');
const oauth = require('axios-oauth-client');
const qs = require('qs');
const APP_ID = 'XXXXXXXXXXXXXXXX';
const APP_SECERET = 'YYYYYYYYYYYYYYYY';
const TOKEN_ENDPOINT ='https://login.microsoftonline.com/MyTenantID/oauth2/token?api-version=1.0';
const MS_GRAPH_SCOPE = 'Data.Read';
const resource ='https://api.loganalytics.io';
var responseval = "";
const postData = {
client_id: APP_ID,
scope: resource,
client_secret: APP_SECERET,
grant_type: 'client_credentials'
};
axios.defaults.headers.post['Content-Type'] =
'application/x-www-form-urlencoded';
axios
.post(TOKEN_ENDPOINT, qs.stringify(postData))
.then(function(response){
console.log(response);
})
.catch(function (err){
console.log(err.response);
});

最新更新