2017-01-17 4 views
1

Я пытаюсь выполнить проверку подлинности с Адал (Внутри реагировать приложение), поэтому я последовал the example от Azure-образцов, и это мой код:Невозможно прочитать информацию о пользователе - Адал ошибка не может войти в

var AuthenticationContext = require('../../node_modules/adal-angular/lib/adal.js'); 

var adalInstance = new AuthenticationContext({ 
    instance: 'https://login.microsoftonline.com/', 
    clientId: '9897809e-XXXX-XXXX-XXXX-3e6de068af92', 
    postLogoutRedirectUri: window.location.origin, 
    endpoints: {} 
}); 


export function enter() { 
    adalInstance.login(); 
    var isCallback = adalInstance.isCallback(window.location.hash); 
    adalInstance.handleWindowCallback(); 
    if (isCallback && !adalInstance.getLoginError()) { 
    adalInstance.acquireToken(adalInstance.config.clientId, function (error, token) { 
     if (error || !token) { 
     console.log('ADAL Error Occurred: ' + error); 
     return; 
     } 
    }); 
    } 
    var user = adalInstance.getCachedUser(); 
    console.log(user); 
} 

export function logout() { 
    adalInstance.logout(); 
} 

Так у меня есть следующие сообщения: Произошел

ADAL Ошибка: Логин пользователя требуется

и для пользователя, я получаю null.

В настоящее время я могу перейти на страницу входа в систему microsoft (вызванную из компонента входа), войти в систему и вернуться в приложение. У меня есть sessionStorage set:

Storage { adal.state.login: "73771340-XXXX-XXXX-XXXX-858c9edcba05", adal.nonce.idtoken: "20074445-XXXX-XXXX-XXXX-9f94c9b5cc31", adal.login.error: "", adal.error: "Invalid_state", adal.login.request: "http://localhost:3000/#id_token=eyJ…", adal.error.description: "Invalid_state. state: a2f210a5-e34b…", adal.token.renew.status: "Completed", length: 7 } 

Что я делаю неправильно?

ДАННЫЕ: Я использую adal.js библиотеку из версии в adal-angular пакет: AdalJS v1.0.13

EDIT:

Теперь я использую конкретный adal.js из here

Я изменил мой код:

var AuthenticationContext = require('./adal.js'); 

Когда я скомпилировал его (с помощью Webpack с Вавилонской для transpiling кода ES6), но дал мне ошибку о logging is not defined, поэтому я добавил:

var Logging = { 
    level: 3, 
    log: function (message) { 
    console.log(message); 
    } 
} 

к adal библиотеке.

И теперь, я получаю в браузере (Firefox, потому chromes, кажется, не показывают журнал я не знаю, почему) Консоль:

Wed, 18 Jan 2017 11:52:51 GMT:1.0.13-VERBOSE: State: d3c2bb0d-XXXX-XXXX-XXXX-e98a460572e2 bundle.js:74558:8 
Wed, 18 Jan 2017 11:52:51 GMT:1.0.13-INFO: Returned from redirect url bundle.js:74558:8 
Wed, 18 Jan 2017 11:52:51 GMT:1.0.13-INFO: State status:false; Request type:UNKNOWN bundle.js:74558:8 
Wed, 18 Jan 2017 11:52:51 GMT:1.0.13-WARNING: User login is required bundle.js:74558:8 
ADAL Error Occurred: User login is required bundle.js:74507:10 
USER null bundle.js:74513:4 
+0

adalInstance.login() приведет в получении маркеров доступа, adalInstance.acquireToken приведет в получении маркеров конечной точки/ресурсов, так что я не понимаю, почему вы пропускание ClientId в acquireToken. –

ответ

0

Извините за ограничение символов комментария, я пишу мое предложение по устранению неполадок в качестве ответа здесь.

На самом деле, ваш фрагмент кода отлично работает на моей стороне. Для устранения неполадок и устранения этой проблемы вы можете попробовать следующие варианты.

  • В настоящее время, кажется, что синтаксис Javascript в браузере не поддерживает export, require ключевые слова. Таким образом, вы можете проверить связанный скрипт, есть ли что-то неправильное в отношении глобальных переменных. Вы можете протестировать свое приложение AAD с помощью простого javascript в adal.js в качестве образца, к которому вы обращаетесь.
  • Вы можете попытаться добавить глобальную переменную logging для отслеживания всей информации во время потока аутентификации. НАПРИМЕР. добавьте следующий код в скрипт js. Logging = { level: 3, log: function (message) { console.log(message); } }
+0

Благодарим за помощь, я обновил сообщение, но пока не работает – FacundoGFlores

1

Во время интеграции с конечной точкой PowerBi у меня такая же ошибка. После некоторых исследований получил этот результат. Поэтому приведенный ниже код делает автоматический вход в систему. Замените метод yourLogic, чтобы использовать токен для запроса api.

import AuthenticationContext from "adal-angular/lib/adal"; 
window.AuthenticationContext = AuthenticationContext; 

let authenticationContext = new window.AuthenticationContext({ 
     instance: "https://login.microsoftonline.com/", 
     clientId: "XXXXXXX", 
     postLogoutRedirectUri: window.location.origin, 
     cacheLocation: "localStorage", // enable this for IE, as sessionStorage does not work for localhost. 
    }), 
    resource = "https://analysis.windows.net/powerbi/api", 
    isCallback = authenticationContext.isCallback(window.location.hash); 

authenticationContext.handleWindowCallback(); 

let user = authenticationContext.getCachedUser(), 
    token = authenticationContext.getCachedToken(resource), 
    loginActive = isCallback && user && !token, 
    renewActive = isCallback && user && !!token; 

if (user) { 
    if (!renewActive) { 
     authenticationContext.acquireToken(resource, (errorDesc, token, error) => { 
      if (!error) { 
       yourLogic(token); 
      } else { 
       authenticationContext.error("Error when acquiring token for resource: " + resource, error); 
      } 
     }); 
    } 
} else { 
    authenticationContext.login(); 
}