如何在Keycloak中创建客户端以对接AWS Cognito OIDC身份联合
我之前刚帮团队搭过这套OIDC联合登录方案,给你整理了Keycloak管理员视角的简易操作步骤,亲测可行:
Keycloak管理员侧配置步骤
1. 创建专属OIDC客户端
- 登录Keycloak后台,进入你管理用户的目标Realm
- 左侧菜单点击「Clients」→ 右上角「Create」
- 填写基础配置:
- Client ID:建议设为辨识度高的名称,比如
aws-cognito-oidc-client - Client Protocol:选择
openid-connect - Access Type:选
confidential(因为需要客户端密钥和AWS交互)
- Client ID:建议设为辨识度高的名称,比如
- 点击「Save」进入客户端详情页
2. 配置客户端重定向URI
- 在客户端详情页的「Settings」标签下,找到「Valid Redirect URIs」
- 填入AWS Cognito的回调地址,格式为:
https://<你的Cognito用户池域名>/oauth2/idpresponse提示:这个域名可以先去AWS Cognito用户池的「App integration」→「Domain name」里设置/查看,之后再回来补填也没问题
- 滚动到页面底部,点击「Save」保存
3. 获取客户端密钥(后续AWS配置必用)
- 切换到「Credentials」标签
- 复制「Secret」字段的值,妥善保存——AWS配置OIDC身份提供商时需要这个密钥
4. 确保必要用户声明被包含在Token中
- 切换到「Mappers」标签,检查是否有以下关键声明的映射(如果没有就手动添加):
- sub:默认应该已经存在,对应用户的唯一标识
- email:如果需要用邮箱作为用户标识,添加一个「User Property」类型的映射:
- Name:随便填,比如
email-claim - Property:选
email - Token Claim Name:填
email - Claim JSON Type:选
String - 勾选「Add to ID token」和「Add to access token」
- 点击「Save」完成添加
- Name:随便填,比如
- 同理可以按需添加其他用户属性(比如name、username),确保Cognito能获取到你需要的用户信息
5. 获取Keycloak OIDC元数据地址(后续AWS配置必用)
- Keycloak的OIDC配置元数据地址格式为:
举个例子:如果你的Keycloak域是https://<你的Keycloak域名>/auth/realms/<你的Realm名称>/.well-known/openid-configurationkeycloak.example.com,Realm是my-user-realm,那地址就是:https://keycloak.example.com/auth/realms/my-user-realm/.well-known/openid-configuration - 复制这个地址,AWS配置OIDC身份提供商时会用到
补充:AWS侧核心配合步骤(避免你卡壳)
虽然你要的是Keycloak视角,但提一下AWS那边的关键操作:
- 在AWS Cognito用户池中,添加「OpenID Connect身份提供商」,填入刚才的元数据地址、客户端ID、客户端密钥
- 在用户池的「App client」里,启用这个OIDC提供商作为登录选项
- 配置API Gateway使用Cognito用户池作为授权方,或者直接使用OIDC授权(根据你的架构选择)
内容的提问来源于stack exchange,提问作者shonky linux user
相关产品推荐
相关产品推荐

