2016-10-21 4 views
2

Я пытаюсь использовать паспорт-лазурное объявление для аутентификации пользователя. Приложение отображает общий экран входа в систему, но при нажатии кнопки «Вход» окно браузера становится пустым и показывает счетчик, указывающий на его работу. Тем временем мой сервер получает непрерывный поток POST-запросов к моей конечной точке обратного вызова.Проблема с использованием паспортно-лазурного объявления OIDCStrategy with Passportjs

За это время ни одна из моих функций паспорта (проверка, serializeUser и deserializeUser) не вызвана.

вот мое определение стратегии:

passport.use("azure", new azureStrategy({ 
    identityMetadata: 'https://login.microsoftonline.com/common/.well-known/openid-configuration', 
    clientID: "*************************", 
    responseType: 'code id_token', 
    issuer: "https://sts.windows.net/********************/", 
    responseMode: 'form_post', 
    redirectUrl: "http://localhost:5055/auth/azure/callback", 
    allowHttpForRedirectUrl: true, 
    clientSecret: "**********************************" 
}, function(iss, sub, profile, accessToken, refreshToken, done) { 
    console.log("ID TOken: ", profile.oid); //Never gets called 
    console.log("User" ,profile) //Never gets called 
    done(null, profile); 
})); 

passport.serializeUser(function(user, done){ 
    console.log("serialize: ", user) //Never gets called 
    done(null, user); 
}) 

passport.deserializeUser((user, done) => { 
    console.log("deserialize: ", user) //never gets called 
    done(null, user); 
}) 

А вот мои определения маршрута:

app.get("/auth/azure", passport.authenticate('azure', {failureRedirect: '/'})) 

app.post("/auth/azure/callback", 
    (req, res, next) => { 
    console.log("POST Callback Received!"); 
    next(); 
    }, 
    passport.authenticate("azure", { 
    failureRedirect: "/error.html" 
    }), 
    (req, res) => { 
    console.log("Recieved POST callback") 
    res.redirect("/user") 
    }) 

Несколько вещей, говоря:

  1. Я разрабатываю приложение для моей организации, поэтому он должен только аутентифицировать пользователей в нашей AD.
  2. Первоначально я попытался использовать версию identityMetadata , но получил ошибку в отношении того, что приложение не поддерживается для версии API. Использование общего, похоже, разрешило эту проблему.
  3. Как уже упоминалось выше, код console.log() в serializeUser, deserializeUser и обратный вызов проверки никогда не вызываются.

Консоль окно на моем сервере nodejs просто показывает, что это:

Request at: 1477083649230 GET/{}   
Request at: 1477083649235 GET /login.html {} 
Request at: 1477084498737 GET /auth/azure {} 
Request at: 1477085275630 POST /auth/azure/callback {} 
POST Callback Received! 
Request at: 1477085275980 POST /auth/azure/callback {} 
POST Callback Received! 
Request at: 1477085276335 POST /auth/azure/callback {} 
POST Callback Received! 
Request at: 1477085276679 POST /auth/azure/callback {} 
POST Callback Received! 
Request at: 1477085277042 POST /auth/azure/callback {} 
POST Callback Received! 

Вы можете видеть, что это только продолжается, пока я не убью эту сессию или перейдите на другую страницу на сайте. Также обратите внимание, что, хотя журнал POST Callback сделан, журнал, который имеет место после аутентификации, никогда не делает.

Любая помощь была бы принята с благодарностью.

+0

Не должен быть ваш второй вызов промежуточного программного обеспечения 'passport.authenticate (" azure ", {...})' –

+0

Да, извините, это было остатками от чего-то другого. Я очистил образец кода так, как он должен быть. – RHarris

+0

Хорошо. А что такое 'azureStragegy'? Я не могу найти в документах (https://github.com/AzureAD/passport-azure-ad) –

ответ

1

При работе с стратегией Google auth я отправлял сообщения с использованием GET; однако, когда я последовал за образцом Azure, мы начали отправлять назад POST.

Я отделял все от образца, который, как я полагал, не нужен. Одной из таких вещей был BodyParser. К сожалению, это была необходимая часть, так что Passport может анализировать тело запроса POST, чтобы получить информацию, отправляемую с сервера auth.

Таким образом, необходимые биты были следующими:

var parser = require("body-parser") 

... 
//before passport.initialize() 
app.use(parser.urlencoded({extended: true})); 

Вот и все прошло, и все начали работать так, как должно. Надеюсь, это избавит кого-то еще от головной боли!

 Смежные вопросы

  • Нет связанных вопросов^_^