Angular 从 kerberos 身份验证中获取数据
Angular get data from kerberos authentication
我有一个带有后端的 angular 应用程序。在应用程序启动之前,身份验证由浏览器使用 Kerberos 管理。响应包含其中包含角色的 JWT。
我的方法是在应用程序开始获取用户凭据时对服务器进行额外的 HTTP 调用。这是通过 app.module.ts
中的 APP_INITIALIZER
实现的,所以当应用程序启动时我已经有了凭据。
providers: [
...,
{
provide: APP_INITIALIZER,
useFactory: Utilitys.authServiceFactory,
deps: [AuthenticationService],
multi: true
}]
这工作正常。 但我的问题是:我是否必须进行额外的调用,或者有没有办法从浏览器请求中获取响应?
如果是:怎么可能?
如果否: APP_INITIALIZER
是只获取一次数据的推荐方法吗?还是我应该使用执行 HTTP 调用的 route guard
来保护所有路由?
经过更多研究后,我还没有找到无需对服务器进行额外的 http 调用即可获取用户信息的解决方案。
APP_INITIALIZR
对于我的初始用例来说效果很好。但是后来我的 AuthenticationService
正在扩展并且 APP_INITIALIZR
无法处理由于循环依赖而需要注入路由器的服务。因此,我在接受的答案中推荐解决方案。
要仅在您的应用程序启动后获取数据,您也可以使用 Route Guards
。
您可以像这样定义一个由路由守卫保护的无组件路由:
// Route Guard
canActivate(): boolean | Promise<boolean> | Observable<boolean> {
if (this.yourService.isAuthenticated()) {
return true;
}
return this.loginService.login();
}
// Routes
{
path: '',
canActivate: [AuthGuard],
children: [
{ path: 'comp1', component: Comp1 },
{ path: 'comp2', component: Comp2 },
...
]
}
这样每条路线都受到您的保护,您可以检查您的用户是否登录/验证以访问您的应用程序。
请注意,您的常规组件将是无组件保护路由的子组件。
我有一个带有后端的 angular 应用程序。在应用程序启动之前,身份验证由浏览器使用 Kerberos 管理。响应包含其中包含角色的 JWT。
我的方法是在应用程序开始获取用户凭据时对服务器进行额外的 HTTP 调用。这是通过 app.module.ts
中的 APP_INITIALIZER
实现的,所以当应用程序启动时我已经有了凭据。
providers: [
...,
{
provide: APP_INITIALIZER,
useFactory: Utilitys.authServiceFactory,
deps: [AuthenticationService],
multi: true
}]
这工作正常。 但我的问题是:我是否必须进行额外的调用,或者有没有办法从浏览器请求中获取响应?
如果是:怎么可能?
如果否: APP_INITIALIZER
是只获取一次数据的推荐方法吗?还是我应该使用执行 HTTP 调用的 route guard
来保护所有路由?
经过更多研究后,我还没有找到无需对服务器进行额外的 http 调用即可获取用户信息的解决方案。
APP_INITIALIZR
对于我的初始用例来说效果很好。但是后来我的 AuthenticationService
正在扩展并且 APP_INITIALIZR
无法处理由于循环依赖而需要注入路由器的服务。因此,我在接受的答案中推荐解决方案。
要仅在您的应用程序启动后获取数据,您也可以使用 Route Guards
。
您可以像这样定义一个由路由守卫保护的无组件路由:
// Route Guard
canActivate(): boolean | Promise<boolean> | Observable<boolean> {
if (this.yourService.isAuthenticated()) {
return true;
}
return this.loginService.login();
}
// Routes
{
path: '',
canActivate: [AuthGuard],
children: [
{ path: 'comp1', component: Comp1 },
{ path: 'comp2', component: Comp2 },
...
]
}
这样每条路线都受到您的保护,您可以检查您的用户是否登录/验证以访问您的应用程序。
请注意,您的常规组件将是无组件保护路由的子组件。