我正在我的 Angular 2 项目中实现 Keycloak 身份验证服务。我使用服务进行登录、注销等。
验证用户并注销似乎有效。我现在正试图保护一些路线。我现在有一个有效的 AuthGuard。为了检查用户是否登录(在 AuthGuard 中),我在服务中有一个 isAuthenticated() 方法。这是服务:
import { Injectable } from '@angular/core';
declare let Keycloak: any;
@Injectable()
export class KeycloakService {
private keycloak = new Keycloak('app/keycloak/keycloak.json');
constructor() {
this.keycloak.init({onload: 'check-sso'});
console.log(this.keycloak);
}
public login() {
this.keycloak.login();
}
public logout() {
this.keycloak.logout();
}
public isAuthenticated() {
return this.keycloak.authenticated;
}
}
流程:用户登录,用户尝试访问受保护的路由,AuthGuard 检查用户是否通过 isAuthenticated() 登录。
注意:我不想对完整的 Angular 应用程序的用户进行身份验证。仅适用于某些路线。
问题
用户登录后,用户被重定向到 Angular 应用程序。在此之后,isAuthenticated() 方法仍然返回 false。原因如下:
我将 Keycloak 对象记录到控制台。我发现了一些我不明白的东西。
登录重定向后的 Keycloak 对象
登录重定向后相同的 Keycloak 对象(但已扩展)
首先认证的属性是假的。展开后验证属性为真。
问题
我尝试维护 Keycloak 对象的方式是否正确?
咨询来源
- https://keycloak.gitbooks.io/securing-client-applications-guide/content/v/2.5/topics/oidc/javascript-adapter.html
- https://github.com/keycloak/keycloak/tree/master/examples/demo-template/angular2-product-app/src/main/webapp/app
和别的