Я нашел хорошее объяснение на сайте https://docs.microsoft.com/en-us/microsoftteams/platform/concepts/authentication/auth-silent-aad о том, как ADAL создает скрытый IFrame.
Библиотека ADAL.js создает скрытый iframe дляOAuth 2.0 неявный поток предоставления, но он указывает prompt = none, так что Azure AD никогда не показывает страницу входа.Если требуется взаимодействие с пользователем, поскольку пользователю необходимо войти в систему или предоставить доступ к приложению, Azure AD немедленно вернет ошибку, о которой ADAL.js сообщает в ваше приложение.На этом этапе ваше приложение может показать кнопку входа в систему, если это необходимо.
Решение было очень простым.Мне нужно было просто написать одну строку кода
this.adalsvc.RenewToken('https://graph.microsoft.com');
Единственный момент, который следует отметить, заключается в том, что, поскольку переменная "adalsvc" создается в конструкторе посредством внедрения, вам необходимо создать копию adalsvc исохраните его в глобальной переменной типа MsAdalAngular6Service и затем выполните метод RenewToken для этого объекта.Вот пример кода, который я написал.Я выполняю RenewToken одним нажатием кнопки, но в реальном сценарии его можно выполнить неинтерактивным способом.
import { Component } from '@angular/core';
import { MsAdalAngular6Service } from 'microsoft-adal-angular6';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'app';
newadalsvc: MsAdalAngular6Service;
onClickMe() {
this.getNewToken();
}
constructor(private adalSvc: MsAdalAngular6Service) {
if (!this.adalSvc.userInfo) {
this.adalSvc.login();
} else {
const token = this.adalSvc.acquireToken('https://graph.microsoft.com').subscribe((token: string) => {
this.newadalsvc = adalSvc;
alert(token);
console.log(token);
localStorage.setItem('authtoken', token);
});
}
}
getNewToken()
{
this.newadalsvc.RenewToken('https://graph.microsoft.com');
//Without calling acquireToken the new token will not be set in the "Local Storage"
this.newadalsvc.acquireToken('https://graph.microsoft.com').subscribe((token) => {
console.log('Token >>>>>>>>>>>>>>', token);
});
}
}