Я использую https://www.npmjs.com/package/angular-oauth2-oidc библиотеку.
Я создал новый проект и реализовал эту библиотеку.
My app.component.ts :
<button (click)="auth()">auth</button>
<div *ngFor="let message of messages">
{{message.key}} <span class="old">{{message.oldValue}}</span> <span class="new">{{message.newValue}}</span>
</div>
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
public messages = [];
constructor(private oAuthService: OAuthService) {
// here i'm logging local storage changing
window.addEventListener('storage', (event) => {
this.messages.push(event);
});
this.oAuthService.loadDiscoveryDocument().then(() => {
this.oAuthService.tryLogin();
});
}
public auth() {
this.oAuthService.initImplicitFlow();
}
}
Когда я нажимаю кнопку «auth», он перенаправляет меня на сервер OID C для авторизации.
Я авторизуюсь, и OID C перенаправляет меня обратно на мой локальный хост.
Затем происходят странные вещи:
Safari вызывает беззвучное обновление. html через ~ 2 se c после авторизации, затем очищает локальное хранилище (только с помощью ключей, использующих эту библиотеку, я имею в виду, если я отправлю sh что-то в локальное хранилище, оно не будет удалено).
Если я очистить файл тихого обновления. html он не очистит локальное хранилище сразу, только через ~ 30 секунд c после запроса тихого обновления. html.
Итак, похоже, что сафари не будет хранить токены в локальном хранилище или хранилище сеансов и пытается очистить его: (
My тихое обновление. html:
<html>
<body>
<script>
(window.opener || window.parent).postMessage(location.hash || ('#' + location.search), location.origin);
</script>
</body>
</html>
BTW, Chrome не вызывает молчание продлить через ~ 2 с. c после успешной авторизации и без очистки локального хранилища.
Safari v 13.1 MacOS 10.14.6