NodeJS доступ к веб-приложению Azure Сбой аутентификации REST API - PullRequest
0 голосов
/ 11 января 2020

Я пытаюсь создать образец NodeJS приложения, в которое я буду звонить Azure Log Analytics REST API, и у меня уже есть регистрация приложения, но я не Node JS разработчик и, к сожалению, застрял здесь, я получил некоторые код от какого-то поиска вокруг, но это не работает вообще, может кто-нибудь помочь мне, как я могу получить это, чтобы получить токен аутентификации от NodeJs (я только что создал пример приложения Express 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.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

Ответы [ 2 ]

0 голосов
/ 11 января 2020

После небольшого сбора базовых знаний Благодаря Node.JsTutorial по программированию с @ Mo sh (руководство по основам Youtube Node.Js) я смог заставить это работать. Я создал простое консольное Node.Js приложение, как предложено выше @Gary, и ниже приведен код, который возвращает токен сейчас (следующим шагом будет введение его в функцию и использование в веб-приложении): -

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);
    });
0 голосов
/ 11 января 2020

Вы просто пишете консольный клиент 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, ... }

})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...