Ошибка CORS при попытке войти в Azure AD с помощью ионного приложения - PullRequest
0 голосов
/ 11 октября 2018

Я работаю с Node, Express & Ionic над созданием системы аутентификации Azure AD.Я использую passportjs и passport-azure-ad

Когда я пытаюсь войти в систему, используя мой бэкэнд, все работает нормально, но при звонке с фронта я получаю:

Не удалось загрузить https://login.microsoftonline.com/...: Ответ на предварительный запрос не проходит проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin».Происхождение 'null', следовательно, не разрешено.

Я следовал этому уроку , чтобы установить passport up

Вот маршруты сзади:

router.get('/auth/openid/return', passport.authenticate('azuread-openidconnect'), function(req, res, next) {

    res.send(req.user);
});

router.get('/login', passport.authenticate('azuread-openidconnect'));

Вотpassport setup:

passport.serializeUser((user, done) => {
    // user et le resultat que tu as mis dans les autres done en dessous
    done(null, user.id)
});

passport.deserializeUser((id, done) => {
    dbConsumer.findByPrimaryId(id).then(user => {
        done(null, user)
    });
});

passport.use(new OIDCStrategy({
    // TODO ne pas commiter ces infooooooos
    clientID: "correct clientId",
    clientSecret: "correct client secret",
    identityMetadata: "https://login.microsoftonline.com/constellationdemo.onmicrosoft.com/v2.0/.well-known/openid-configuration",
    responseType: "code",
    responseMode: "query",
    redirectUrl: "https://localhost:3000/azure/auth/openid/return",
    passReqToCallback: false
},
    function(accessToken, refreshToken, profile, done) {
        // look for the user
        dbConsumer.findByAzureId(profile.oid).then(user => {
           if(user.rowCount > 0){
               logger.log({
                   level: 'info',
                   message: profile.displayName + "already exists"
               });
               // On passe un user pour qu'il reconnaisse le user dans le serializer au dessus
               done(null, user.rows[0]);
           }
           else {
               dbConsumer.insertUserProvider(profile.displayName, profile.oid).then(data => {
                   if(data.success) {
                       logger.log({
                           level: 'info',
                           message: "User: " + profile.displayName + "inserted"
                       });
                       // On passe un user pour qu'il reconnaisse le user dans le serializer au dessus
                       done(null, data.newUser);
                   }
               }).catch(err => {
                   logger.log({
                       level: 'error',
                       message: err
                   });
               });
           }
        }).catch(err => {
            console.log("dans l err");
            console.log(err);
        });
}))

Вот мой фронт-сервис:

initHeaders() {
    let headers = new HttpHeaders()
      .set('Access-Control-Allow-Origin', "*")
      .set("Content-Type", "application/json")
      .set("Access-Control-Expose-Headers", "Content-Length");

    return headers;
  }

  logToAzure() {
    return this.http.get(this.domain + 'azure/login', {headers: this.initHeaders()})
  }

Когда я проверяю запрос в консоли, ни один из заголовков не устанавливается.

Я также включил Cors в задней части;

Мне нужна помощь

1 Ответ

0 голосов
/ 11 октября 2018

У меня те же проблемы с некоторыми API с угловым.Если вы используете Chrome, попробуйте использовать это приложение Chrome Allow-Control-Allow-Origin

Reference image enable cors with Allow-Control-Allow-Origin

Когда вы включаете cors, некоторыеapis не отвечает (сервисы входа, потоковое видео на YouTube и диск Google не работают должным образом, поэтому будьте осторожны с этим)

...