Firebase集成Keycloak OIDC时出现INVALID_IDP_RESPONSE(invalid_grant,code not valid)错误排查求助
Firebase集成Keycloak OIDC时出现INVALID_IDP_RESPONSE(invalid_grant,code not valid)错误排查求助
我正在给Angular应用做Firebase Authentication和Keycloak(作为OIDC提供商)的集成,结果在Keycloak登录页重定向回Firebase时,碰到了这个错误:
INVALID_IDP_RESPONSE : Error getting access token from [Keycloak issuer URL], OAuth2 redirect uri is: [firebase-app].firebaseapp.com/__/auth/handler, response: OAuth2TokenResponse{params: error=invalid_grant&error_description=Code%20not%20valid, ...}
已完成的配置细节
Firebase OIDC提供商配置
我在Firebase里配置自定义OIDC提供商时,填了这些内容:
- 颁发者(Issuer):
https://<your-domain>/realms/<realm> - 配置了Keycloak提供的客户端ID和客户端密钥
- 重定向URI:
https://<firebase-app>.firebaseapp.com/__/auth/handler
Keycloak客户端配置
对应的Keycloak客户端我是这么配的:
- 访问类型:confidential
- 认证方式:客户端ID和密钥
- 有效重定向URI已包含上述Firebase的重定向地址
- OpenID Connect设置基本为默认值
- 令牌端点:
https://<your-domain>/realms/<realm>/protocol/openid-connect/token
这里有个细节:我没有显式让Keycloak客户端使用client_secret_post,而且Firebase的令牌交换逻辑我也没法控制。
前端登录流程实现
在Angular前端,我用Firebase Auth的signInWithRedirect启动登录流程,然后在登录组件的ngOnInit里调用getRedirectResult处理重定向后的结果。但重定向完成后,拿到的结果是{user: null, credential: null},完全没有有效的用户或凭证信息。
我想请教的问题
有没有大佬碰到过类似的情况?为什么Firebase从Keycloak拿令牌时会得到invalid_grant的响应?会不会和这些因素有关:
- 重定向URI的配置细节问题?
- 会话过期导致授权码失效?
- 授权码被重复使用触发了Keycloak的校验?
- 令牌端点的认证方式和Firebase的请求不匹配?
另外,Keycloak有没有什么特定的配置项是必须调整的,才能让Firebase顺利走完整个OIDC流程?
环境信息
- Firebase(使用自定义OIDC提供商)
- 自托管的最新版Keycloak
- Angular前端,用
@angular/fire包处理认证逻辑
内容来源于stack exchange
相关产品推荐
相关产品推荐

