Тело запроса об ошибке должно содержать следующий параметр 'clinet_id' в руководстве по outlook rest api - PullRequest
0 голосов
/ 27 февраля 2019

Я следую учебному пособию, предоставленному Microsoft, которое использует Node.js для получения Outlook mail, calendar, and contacts.У меня есть кнопка «Вход», которая должна перенаправить вас на Microsoft Outlook, и вы должны войти в систему, а затем она вернется на домашнюю страницу приложения.Когда я нажимаю кнопку входа в систему, я получаю сообщение об ошибке AADSTS900144: The request body must contain the following parameter: 'client_id'. Я смотрел в Интернете, и многие люди говорили, что это может быть связано с тем, что у вас может быть неправильный APP_ID или APP_PASSWORD, полученный при регистрации на App Dev на Microsoft сайт, но я проверил это, и все выглядит хорошо.Я опубликую код ниже, а также ссылку для веб-сайта.

link to tutorial https://docs.microsoft.com/en-us/outlook/rest/node-tutorial

.env file

# Our goal in this section is to
# make the button on our home page initiate 
# the OAuth2 Authorization Code Grant flow with 
#Azure AD. We'll use the simple-oauth2 library to 
# handle our OAuth requests, and the dotenv 
#library to load our app ID and secret from an ENV file.

APP_ID=  e0d134c1-a6bd-48b4-9ab7-16f0894ddbcb 
APP_PASSWORD=  password goes here ( removed due to privacy)
APP_SCOPES=openid profile User.Read Mail.Read
REDIRECT_URI=http://localhost:3000/authorize

auth.js

// this function will generate the login URL

const credentials = {
    client: {
        id: process.env.APP_ID,
        secret: process.env.APP_PASSWORD,
    },
    auth: {
        tokenHost: 'https://login.microsoftonline.com',
        authorizePath: 'common/oauth2/v2.0/authorize',
        tokenPath: 'common/oauth2/v2.0/token'
    }
};
const oauth2 = require('simple-oauth2').create(credentials);

function getAuthUrl() {
    const returnVal = oauth2.authorizationCode.authorizeURL({
        redirect_uri: process.env.REDIRECT_URI,
        scope: process.env.APP_SCOPES
    });
    console.log(`Generated auth url: ${returnVal}`);
    return returnVal;
}

exports.getAuthUrl = getAuthUrl;

index.js

var express = require('express');
var router = express.Router();
var authHelper = require('../helpers/auth')

/* GET home page. */
router.get('/', function (req, res, next) {
  let params = {
    title: 'This is the home page',
    active: {
      home: true
    }
  };

  /*
  Modify the route in the ./routes/index.js file to use the getAuthUrl function to generate a sign-in URL. You'll need to require the auth.js file to gain access to this function.

  */
  params.signInUrl = authHelper.getAuthUrl();
  params.debug = params.signInUrl;
  res.render('index', params)


});

module.exports = router;

authorize.js

var express = require('express');
var router = express.Router();
var authHelper = require('../helpers/auth');

/* GET /authorize. */
router.get('/', function (req, res, next) {
    // Get auth code
    const code = req.query.code;

    // If code is present, use it
    if (code) {
        res.render('index', {
            title: 'Home',
            debug: `Auth code: ${code}`
        });
    } else {
        // Otherwise complain
        res.render('error', {
            title: 'Error',
            message: 'Authorization error',
            error: {
                status: 'Missing code parameter'
            }
        });
    }
});

module.exports = router;
...