You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Keycloak 18.0.1中获取用户密码过期时间

获取Keycloak用户密码过期时间(18.0.1版本 + keycloak-angular/keycloak-js)

核心思路

keycloak-js返回的前端用户基础信息里不会直接包含密码过期时间,必须通过Keycloak Admin API获取用户的凭证详情才能拿到。

步骤实现

  1. 配置权限

    • 给你的前端客户端分配realm-management下的view-users角色(或者自定义一个仅允许查看用户凭证的角色),确保前端的access token具备调用Admin API用户接口的权限。
    • 权限分配可以是用户级(给登录用户加角色)或客户端级(直接给前端客户端加角色),按需选择。
  2. 调用Admin API获取凭证信息
    通过KeycloakService拿到当前用户ID和有效token,发起请求获取用户详情:

    import { KeycloakService } from 'keycloak-angular';
    import { HttpClient, HttpHeaders } from '@angular/common/http';
    
    constructor(private keycloakService: KeycloakService, private http: HttpClient) {}
    
    async getPasswordExpiryDate(): Promise<Date | null> {
      const keycloakInstance = this.keycloakService.getKeycloakInstance();
      const realm = keycloakInstance.realm;
      const userId = keycloakInstance.subject;
      const token = await this.keycloakService.getToken();
    
      const headers = new HttpHeaders({
        'Authorization': `Bearer ${token}`
      });
    
      const userDetails = await this.http.get(`/auth/admin/realms/${realm}/users/${userId}`, { headers }).toPromise();
      // 筛选出密码类型的凭证
      const passwordCredential = (userDetails as any).credentials?.find((cred: any) => cred.type === 'password');
      
      if (!passwordCredential?.expiresTimestamp) {
        return null; // 密码未设置过期策略
      }
    
      return new Date(passwordCredential.expiresTimestamp);
    }
    
  3. 结果处理

    • 如果返回expiresTimestamp字段,转成Date对象就是密码的过期时间;
    • 无该字段则说明用户密码永不过期。

注意事项

  • Keycloak 18的Admin API路径与旧版本一致,无需调整;
  • 若Keycloak部署在不同域名,需配置CORS允许前端访问Admin API;
  • 权限遵循最小化原则,避免给前端分配超出需求的Admin API权限。

内容的提问来源于stack exchange,提问作者DangTri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 00:05:20