Доступ к веб-приложению Azure с помощью passport-azure-ad-oauth2

#node.js #azure #express #oauth-2.0 #passport.js

#node.js #лазурный #выражать #oauth-2.0 #passport.js

Вопрос:

Я пытаюсь аутентифицировать свое веб-приложение Azure с помощью passport-azure-ad-oauth2 в узле JS с помощью express

Я попытался следовать документации, найденной здесь: https://github.com/auth0/passport-azure-ad-oauth2 . Я полагаю, что я правильно определил идентификатор клиента, секрет и URI обратного вызова…

Когда я захожу на localhost:3000, он успешно перенаправляется на вход в Office365. Когда я выбираю предварительно выбранную учетную запись, она просто продолжает возвращаться к «выбранной учетной записи».

При попытке входа в систему с помощью окна инкогнито в Chrome я получаю сообщение об ошибке: URL-адрес ответа, указанный в запросе, не соответствует URL-адресам ответа, настроенным для приложения: ‘*** AppID’.

Мой код явно неправильный, и я надеюсь, что кто-нибудь сможет помочь мне настроить его правильно.

Заранее спасибо!!

Мой код находится здесь

 const express = require("express");
const bodyParser = require("body-parser")
const session = require('express-session');
const passport = require("passport");
const ejs = require("ejs");
const jwt = require("jwt-simple")


const AzureAdOAuth2Strategy = require('passport-azure-ad-oauth2').Strategy;


const app = express();

app.use(express.static("public"));
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({
  extended: true
}));

app.use(passport.initialize());
app.use(bodyParser.urlencoded({ extended: false }));



passport.use(new AzureAdOAuth2Strategy({
    clientID: 'azure client ID',
    clientSecret: 'secret',
    callbackURL: 'http://localhost:3000/auth/aad/callback',
    // resource: '00000002-0000-0000-c000-000000000000',
    // tenant: 'contoso.onmicrosoft.com'
  },
  function (accessToken, refresh_token, params, profile, done) {
    var waadProfile = profile || jwt.decode(params.id_token, '', true);
    console.log(waadProfile);
   
    User.findOrCreate({ id: waadProfile.upn }, function (err, user) {
      done(err, user);
    });
  }));


  app.get("/",passport.authenticate('azure_ad_oauth2'));

  app.get('/auth/aad/callback', 
  passport.authenticate('azure_ad_oauth2', { failureRedirect: '/login' }),
  function (req, res) {
    console.log(req);
    console.log(res);
    res.render('index');
  });



app.listen(process.env.PORT || 3000, function() {
    console.log("Server started on Port 3000");
  });
 

Ответ №1:

URL-адрес обратного вызова в вашем коде отличается от URL-адреса, установленного в Azure.

Вот почему он говорит:

URL-адрес ответа, указанный в запросе, не соответствует URL-адресам ответа, настроенным для приложения: ‘*** AppID’.

Установите правильный URL-адрес в Azure, чтобы исправить это.

Для устранения проблемы с бесконечным перенаправлением очистите кеш и cookie в вашем браузере, и он должен работать.

Однако, если вы не исправите URL обратного вызова, это произойдет снова.