Я пытаюсь незаметно обновить токен доступа в моем Angular SPA. Аутентификация в ADFS завершена. он работает нормально, конфигурация приведена ниже:
oauthService.configure({
redirectUri:
window.location.origin + '/login',
requireHttps: true,
scope: 'openid profile email',
responseType: 'id_token token',
oidc: true,
clientId: environment.adfsClientId,
loginUrl: environment.adfsUrl + '/oauth2/authorize',
issuer: environment.adfsUrl,
logoutUrl:
environment.adfsUrl +
'/ls/?wa=wsignoutcleanup1.0&wreply=' +
location.protocol +
'//' +
location.hostname + '/login',
postLogoutRedirectUri:
window.location.origin + '/login',
});
this.oauthService.tokenValidationHandler = new JwksValidationHandler();
this.oauthService.setStorage(localStorage);
this.oauthService.timeoutFactor = 0.03; // for faster testing
this.oauthService.silentRefreshRedirectUri = window.location.origin + '/search';
this.oauthService.setupAutomaticSilentRefresh();
Для обновления токена iframe добавляется на текущую страницу. все выглядит хорошо. и я добавил следующий код в файл index.html.
<script>
parent.postMessage(location.hash, location.origin);
</script>
Это событие записывается в angular-oauth2-oidc.js в silentRefreshPostMessageEventListener. Но проблема в том, что сообщение, которое я получаю в этом списке, звучит так:
MSIS9621: невозможно обработать запрос авторизации OAuth без ввода данных пользователем.
значение тега src, которое создается в iframe, приведено ниже,
HTTPS: // [ADFS домен] / ADFS / oauth2 / авторизированным / response_type = id_token% 20token & client_id = af0e4d79-ae9d-4fda-86b3-265d1e86a61e & состояние = UmtkeUJfNDBCUU1VWkZyeWcubFlldlo3ZHFFbFRuVDI3TnNZUU5FVXJxTXpX & redirect_uri = HTTP% 3A% 2F% 2Flocalhost% 3A4200% 2Fsearch & Объем = OpenID% 20profile% 20email & nonce = UmtkeUJfNDBCUU1VWkZyeWcubFlldlo3ZHFFbFRuVDI3TnNZUU5FVXJxTXpX & prompt = none
если я открою этот URL-адрес на новой вкладке, я получу новый токен доступа в Uri.
может кто-нибудь сказать мне, что я здесь делаю не так?
ОБНОВЛЕНИЕ
Спасибо, Гэри Арчер за ответ.
Я внес изменения в ADFS, выполнив этот код в PowerShell,
Set-AdfsResponseHeaders -RemoveHeaders X-Frame-Options
Ничего не изменилось. Затем я установил команду ниже, чтобы исправить эту проблему.
Set-AdfsResponseHeaders -SetHeaderName Content-Security-Policy -SetHeaderValue frame-ancestors