определить, возможен ли silentlogin в adaljs-angular4 - PullRequest
0 голосов
/ 15 октября 2018

Я использую библиотеку adal-angular4@3.0.13 в проекте angular 6.Я пытаюсь сделать следующее:

  1. Если SileNlogin (вход в систему без запроса пользователя для учетных данных) с Office365, то сделать SileNLOG (с _adalService.login()

  2. Если неактивный логин невозможен, отобразите кнопку «Войти» на экране приветствия.

Безгласный логин будет возможен, когда я аутентифицируюсь вazure-ad / o365 и файл cookie все еще действителен.

Чтобы выяснить, возможен ли молчащий логин, я попытался сделать следующее:

try {
  let token = await this._adal.acquireToken(this._config.clientId).toPromise();
  return true;
} catch (e) {
  console.log('acquireToken error', e);
  return false;
}

Но он всегда возвращает:

Требуется логин пользователя

Но при звонке _adalService.login() он делает silentlogin.

Мой вопрос: Как я могу узнать,если adaljs может войти в систему без запроса учетных данных (это должно быть возможно, как чтение из файла o365)?

1 Ответ

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

Вместо того, чтобы пытаться определить, доступен ли тихий вход в систему, вы должны передать PlatformBehavior.Auto параметру PlatformParameters AcquireToken.

Проблема в том, что adal.jsфактически не поддерживает необходимую перегрузку, и вы не можете указать это значение как extraQueryParameter.Какое-то время я думал, что вы можете использовать параметр запроса prompt, но это не так.

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

Из исходного кода adal.js я вижу, что сообщение отображается в таком состоянии:

if (!this._user && !(this.config.extraQueryParameter && this.config.extraQueryParameter.indexOf('login_hint') !== -1)) {
    this.warn('User login is required');
    callback('User login is required', null, 'login required');
    return;
}

И в эта статья , login_hint описывается так:

Может использоваться для предварительного заполнения поля имени пользователя / адреса электронной почты на странице входа для пользователя, еслиВы знаете их имя пользователя заранее.Часто приложения будут использовать этот параметр во время повторной аутентификации, уже извлечя имя пользователя из предыдущего входа, используя утверждение предпочитаемого_пользователя.

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

Чтобы наконец ответить на вопрос, кажется, вам следует добавить 'login_hint=myemail@example.com' к вашему config.extraQueryParameter.

...