现有Keycloak认证体系切换为Azure Managed Identities需调整哪些部分?
解决方案:迁移至Azure Managed Identities的配置调整与Keycloak兼容性说明
Keycloak是否仍适用?
完全适用。Azure Managed Identities(MSI)可与Keycloak无缝集成,替代传统Client ID/Secret方式实现与Azure AD的身份对接——核心是通过MSI的无密钥身份验证机制,让Keycloak安全向Azure AD请求令牌并验证用户身份。
需要修改的核心部分
1. Keycloak侧配置调整
- 替换OIDC身份提供商的凭据方式:
原配置依赖Entra App的Client ID和Secret,现在改为依托Managed Identity:- 从Azure门户获取目标Managed Identity的客户端ID(系统分配MSI在VM的「身份」页面查看,用户分配MSI直接查看属性)。
- 在Keycloak的OIDC身份提供商配置中填入该客户端ID,清空客户端Secret字段。
- 将令牌请求URL设置为Azure IMDS端点:
http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://login.microsoftonline.com/{你的租户ID}/oauth2/token,确保Keycloak容器能访问这个内部元数据端点(Azure VM默认允许容器访问)。
- 调整令牌验证规则:
- 更新JWKS URL为Azure AD公钥端点:
https://login.microsoftonline.com/{你的租户ID}/discovery/v2.0/keys,确保Keycloak能正确验证Azure AD令牌的签名。 - 校验令牌
aud(受众)属性:MSI获取的令牌受众可能对应Azure AD的OIDC资源,需在Keycloak身份提供商配置中添加允许的受众值,或临时关闭严格受众验证(仅建议测试环境使用)。
- 更新JWKS URL为Azure AD公钥端点:
- 权限映射逻辑调整:
若原权限通过Entra App的角色/组传递,需确认Azure AD是否将这些权限包含在MSI获取的用户令牌中。可在Keycloak的「用户联邦」或「属性映射」里,调整从Azure AD令牌到Keycloak用户属性/角色的映射规则,确保应用所需权限能正确同步。
2. 应用与部署侧调整
- 移除应用内的Entra App凭据:
若微服务之前配置了与Entra App相关的Client ID/Secret(比如直接调用Azure AD API),需删除这些配置项,所有身份验证请求统一通过Keycloak处理。 - 容器与VM的身份配置:
- 为运行Keycloak的Azure VM启用系统分配的Managed Identity,或关联用户分配的Managed Identity:在Azure门户VM的「身份」页面开启系统分配身份,或添加已创建的用户分配身份。
- 为该Managed Identity授予Azure AD必要权限:比如添加Microsoft Graph的
User.Read、GroupMember.Read.All等权限(根据权限同步需求调整),并完成管理员同意。
- 令牌解析逻辑(按需调整):
若应用之前解析的是Entra App令牌中的权限字段,现在改为解析Keycloak颁发的令牌,需确认Keycloak已将Azure AD权限正确映射到自身令牌的roles或自定义字段中;若字段键有变化,需调整应用内的解析代码。
验证流程建议
- 启动Keycloak容器,查看日志确认是否能通过IMDS成功获取Azure AD的客户端凭据。
- 测试用户登录流程:通过Keycloak跳转至Azure AD登录,验证登录后Keycloak是否能正确获取用户信息与权限。
- 调用微服务接口,验证应用是否能从Keycloak令牌中解析到正确权限并完成授权。
内容的提问来源于stack exchange,提问作者Chintan Pathak
相关产品推荐
相关产品推荐

