У меня есть приложение, которое использует MSAL.js для аутентификации Azure B2C. Таким образом, он следует обычному неявному потоку OAuth 2.0 для аутентификации пользователя - когда пользователь нажимает кнопку «Вход», он перенаправляется на «авторизацию» конечной точки, а затем пользователь перенаправляется обратно в приложение после успешного входа в систему.
Ивот в чем проблема - ответ на запрос выглядит следующим образом:
https://localhost:4200/run#state=dc81c410-4cbd-4218-bc78-9c5b5e9bebe5&client_info={...}
Чтобы это работало, мне нужно переписать этот URLв run/state
, поэтому итоговый URL будет:
https://localhost:4200/run/state=f5f2c20f-ed72-4631-b834-80bf60aa6cd7&client_info={...}
И это делается в AppComponent.ngInit
:
this.router.events.subscribe(event => {
if (event instanceof NavigationStart) {
if (!!event.url && event.url.match(/^\/run#state/)) {
const newUrl = event.url.replace("run#state", "run/state");
console.warn(`newUrl = ${newUrl}`);
this.router.navigate([newUrl]);
}
}
});
Теперь я вижу переписывание в логах.
Но проблема в том, что он теперь перенаправляет в root. Из журнала:
NavigationStart
для run/state
- URL REWRITE (но на этот раз уже ничего не перезаписывается, сейчас
run/state
сейчас) - "Angular работает в режиме разработки. Вызовите enableProdMode () для включения производственного режима. "
- " Обработка обратного вызова из ответа на перенаправление "-
MSAL.js callback function
- " CHECK USER "- from
CanLoad
охранник (который сейчас просто возвращает true
) RouteConfigLoadStart
- Перешел к https://localhost:4200/ BOOM !!!
Почему на Земле он перенаправляет на root?
Одна важная вещь - если я перейду к:
https://localhost:4200/run/state=04e49903-1510-47da-9b24-cee988229d16&client_info={...}
в браузере, он открывает этот маршрут (без перенаправлений!).
Репо на github .
консоль: