Я создал веб-приложение (Angular 5 + MSAL + ASP.NET Core) и подключил его к Azure AD B2C.Мне нужны были пользовательские потоки при подписании, поэтому я должен использовать пользовательскую политику.Аут работает отлично.Затем мне пришлось добавить другого поставщика Azure AD.Дело в том, что пользователи из AAD и ADD B2C подписывают с разным поведением.
в общем код выглядит следующим образом:
this.clientApplication = new UserAgentApplication(
environment.auth.clientId,
environment.auth.loginAuthority,
this.authCallback.bind(this),
{
validateAuthority: false,
cacheLocation: 'localStorage',
logger: logger
}
);
...
public login(): void {
return this.clientApplication.loginRedirect(environment.auth.scopes);
}
...
public getAccessTokenAsync(): Promise<string> {
return this.clientApplication.acquireTokenSilent(environment.auth.scopes)
.then((accessToken: string) => {
return accessToken;
})
.catch((silentError: object) => {
return this.clientApplication.acquireTokenPopup(environment.auth.scopes)
.then((accessToken: string) => Promise.resolve(accessToken))
.catch((popupError: object) => {
return Promise.resolve('');
});
});
}
Сначала я использую login
, а когда происходит http-вызов, яиспользуйте getAccessTokenAsync
.
Пользователи из B2C перенаправлены с входа в систему, а acquireTokenSilent
возвращает токен доступа.
Пользователи из AD перенаправляются с входа в систему, и acquireTokenPopup
выдает ошибку, но токен сохраняетсяв локальное хранилище, поэтому после обновления все работает.(Ошибка: отказано отображать «http ...» в кадре, поскольку для параметра «X-Frame-Options» установлено значение «deny».)
Есть идеи, почему это работает?