Недавно я начал использовать KeyCloak с Angular. Мой докер KeyCloak работает на порту 8080, а мое приложение Angular - на 4200. Теперь, когда я получаю доступ к своему приложению через браузер, я перенаправляюсь на auth/realms/...
с соответствующим URL-адресом перенаправления. Это ожидаемое поведение на данный момент. Однако до того, как страница входа в KeyCloak загрузится, я перенаправляюсь обратно на auth/realms/...
, но на этот раз мой URL-адрес перенаправления - старый auth/realms/...
, который у меня был только что.
Проблема, похоже, не в самом KeyCloak, а в моей реализации Angular, поскольку даже если я отключу свой клиент KeyCloak или получу доступ не к тому клиенту, я получу такое же поведение.
Теперь немного кода. Я настроил свои KeyCloakOptions следующим образом:
export const keycloakOptions: KeycloakOptions = {
config: {
url: '/auth',
realm: 'bookstore',
clientId: 'bookstore-front-end'
},
initOptions: {
onLoad: 'login-required',
checkLoginIframe: false
},
enableBearerInterceptor: true,
bearerExcludedUrls: ['/assets']
};
И Сервис инициализируется так:
export class AppModule implements DoBootstrap {
public ngDoBootstrap(appRef: ApplicationRef): void {
keycloakService
.init(keycloakOptions)
.then(() => {
console.log('[ngDoBootstrap] bootstrap app');
appRef.bootstrap(AppComponent);
})
.catch(error => console.error('[ngDoBootstrap] init Keycloak failed', error));
}
}
У меня есть подозрение, что маршрутизация моего приложения как-то связана с проблемой. Это выглядит так:
const routes: Routes = [
// home route protected by auth guard
{path: 'books', component: BooksComponent, canActivate: [AuthGuard]},
// otherwise redirect to home
{path: '', redirectTo: 'books', pathMatch: 'full'}
];
Если вам понадобится дополнительный код, дайте мне знать, мы будем рады любой помощи.
РЕДАКТИРОВАТЬ:
Мой первый запрос выглядит так:
http://localhost:4200/auth/realms/bookstore/protocol/openid-connect/auth?client_id=bookstore-front-end&redirect_uri=http%3A%2F%2Flocalhost%3A4200%2F&state=c530f55a-b21e-43c3-8e1c-a3beb134c9ee&response_mode=fragment&response_type=code&scope=openid&nonce=0c359787-92e7-4d6d-9578-a65da686b046
Однако я только что понял, что в теле ответа я получаю index.html
файл моего приложения, что странно.
auth
или это отредактированное значение для этого вопроса? Возможно, отсутствует порт 8080. - person Codo   schedule 04.02.2020