Так как мы используем OpenID Connect, нам нужен маршрутизатор Aurelia, чтобы обработать ответ авторизации OpenID Connect, который выглядит следующим образом:Handle успешной OpenID Connect ответ авторизации в Safari <= 9
https://client.example.org/signin-oidc#
access_token=SlAV32hkKG
&token_type=bearer
&id_token=eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso
&expires_in=3600
&state=af0ifjsldkj
Для того, для этого мы установили маршрутизатор с состоянием push, как это.
// switch from hash (#) to slash (/) navigation
routerConfig.options.pushState = true;
Это успешно работает в большинстве веб-браузеров. Маршрутизатор Aurelia обрабатывает маршрут/signin-oidc, а клиентский код может получить доступ к фрагменту. Хорошо.
Существует проблема в Safari < = 9.0 на Yosemite, однако, поскольку WebKit bug #24701 удаляет фрагмент при переадресации, а успешный ответ авторизации OpenID Connect является перенаправлением (302 Найдено). Результат: браузер отправляет только следующее, в котором отсутствует фрагмент. Нехорошо.
https://client.example.org/signin-oidc
Чтобы обойти эту проблему, чтобы поставить косую черту перед хэша:
https://client.example.org/signin-oidc/#
access_token=SlAV32hkKG
&token_type=bearer
&id_token=eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso
&expires_in=3600
&state=af0ifjsldkj
Это решает ошибку WebKit и Safari < = 9 на Йосемитах включает в себя фрагмент.
Решено? Неа.
Обходной путь прерывает маршрутизатор Aurelia, который больше не может понять часть URI /#
. Как мы можем настроить маршрутизатор Aurelia для обработки успешного ответа на авторизацию с сервера авторизации OpenID Connect?
Похоже, что ответ заключается в том, чтобы развернуть маршрутизатор Aurelia, и если мы сможем сделать работу маршрутизатора в нашем случае, превратите эту вилку в PR. –
Что меня удивляет в связи с этим ответом, подразумевается, что Safari 9 на Yosemite не является вечнозеленым браузером. –
Последняя версия Safari для Yosemite - 10. –