You need to enable JavaScript to run this app. Keycloak-js客户端在Angular项目登录时传递自定义acr_values参数
优惠活动
大模型
产品
解决方案
定价
更多

Keycloak-js客户端在Angular项目登录时传递自定义acr_values参数

实现方案

keycloak-js 的 login 方法原生支持传入额外自定义参数,你需要的 acr_values 可以直接放在调用时的参数对象中传递,参数会自动拼接在授权请求的查询参数内,配合你已经配置好的 Keycloak 服务端参数转发规则,IDP 即可正常识别该参数。

下面按 Angular 项目两种常见的集成场景给出代码示例:

场景1:直接使用原生 keycloak-js 库

import Keycloak from 'keycloak-js';

// 初始化Keycloak实例的已有逻辑省略
const keycloak = new Keycloak({
  url: '你的Keycloak服务地址',
  realm: '你的Realm名称',
  clientId: '你的客户端ID'
});

// 调用登录时传入acr_values
keycloak.login({
  acr_values: '你需要传递的参数值,比如自定义登录方式标识'
}).then(() => {
  // 登录成功后的业务逻辑
});

场景2:使用 keycloak-angular 封装库(Angular 生态常用集成方案)

初始化自动登录时传参

如果你的项目配置了启动自动登录,可以在初始化配置的 loginOptions 中统一配置参数:

import { KeycloakService } from 'keycloak-angular';

export function initializeKeycloak(keycloak: KeycloakService) {
  return () =>
    keycloak.init({
      config: {
        url: '你的Keycloak服务地址',
        realm: '你的Realm名称',
        clientId: '你的客户端ID'
      },
      initOptions: {
        onLoad: 'login-required',
        checkLoginIframe: false
      },
      // 配置全局默认登录参数
      loginOptions: {
        acr_values: '你的参数值'
      }
    });
}

手动触发登录时传参

如果是点击登录按钮这类手动触发的登录逻辑,直接在调用 login 方法时传参即可:

import { KeycloakService } from 'keycloak-angular';

@Component({
  // 组件基础配置省略
})
export class LoginComponent {
  constructor(private keycloakService: KeycloakService) {}

  handleLogin() {
    this.keycloakService.login({
      acr_values: '你的参数值'
    });
  }
}

小提示:如果需要传递多个acr值,用空格分隔即可,比如 acr_values: 'pwd otp',Keycloak 会按优先级将参数传递给IDP。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 12:36:09