Я следую учебному пособию, предоставленному 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;