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

Keycloak:身份提供商登录时获取邮箱并验证域名且不创建新账户

限制Keycloak中Google身份提供商的托管域名访问

我之前刚好处理过类似的需求——要让Keycloak的Google身份提供商只允许特定托管域名的用户登录,而不是随便哪个Google账户都能访问。下面是完整的实现方案,包括脚本代码和配置步骤:

1. 编写托管域名验证脚本

直接用Keycloak的认证脚本功能,在first broker login流程里插入验证逻辑,尽早拦截不符合要求的用户。完整脚本如下:

AuthenticationFlowError = Java.type("org.keycloak.authentication.AuthenticationFlowError");

function authenticate(context) {
    // 获取当前用户的身份提供商数据(来自Google)
    var user = context.getUser();
    var attributes = user.getAttributes();
    
    // 定义你允许的托管域名,替换成你的实际域名
    var allowedDomain = "your-company.com";
    
    // 方式1:直接读取Google返回的`hd`字段(推荐,官方托管域名标识更可靠)
    var hostedDomain = attributes.getFirst("hd");
    if (!hostedDomain || hostedDomain !== allowedDomain) {
        // 域名不匹配,抛出错误终止流程
        context.failure(AuthenticationFlowError.INVALID_USER, 
            context.form().setError("invalid-domain", allowedDomain).createForm("error.ftl"));
        return false;
    }

    // 方式2:如果hd字段不存在,解析邮箱域名作为备选方案
    // var email = user.getEmail();
    // if (!email || !email.endsWith("@" + allowedDomain)) {
    //     context.failure(AuthenticationFlowError.INVALID_USER, 
    //         context.form().setError("invalid-domain", allowedDomain).createForm("error.ftl"));
    //     return false;
    // }

    // 验证通过,继续后续认证流程
    return true;
}

脚本关键说明

  • 优先用方式1:Google OAuth返回的hd字段是官方的托管域名标识,比解析邮箱更准确,能避免用户邮箱别名等特殊情况的误判
  • 把your-company.com替换成你实际要限制的托管域名
  • 验证不通过时,会触发Keycloak的错误页面,明确提示用户域名不符合要求

2. 在Keycloak中配置脚本流程

默认的first broker login流程不建议直接修改,最好复制一个新流程来定制:

  • 登录Keycloak管理控制台,进入你的目标Realm
  • 切换到Authentication -> Flows标签页
  • 找到first broker login流程,点击右侧的Actions -> Copy,给新流程起个辨识度高的名字(比如first-broker-login-restricted)
  • 在新流程里,找到Review Profile步骤,点击它上方的Add execution,选择Script Execution后点击Save
  • 把新添加的Script Execution步骤拖到Review Profile的前面(确保验证逻辑在用户创建/资料更新之前执行)
  • 点击这个脚本步骤的Actions -> Config,把上面的脚本粘贴进去,设置Script Type为Authentication Script,保存配置
  • 最后,转到Identity Providers -> 你的Google身份提供商,在Authentication Flow Overrides区域,把First Broker Login Flow设置为你刚才创建的first-broker-login-restricted流程,保存即可

这样配置完成后,任何非指定托管域名的Google账户在登录时都会被直接拦截,无法进入后续的用户创建或资料审核环节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:44:09