Django Allauth集成Keycloak认证时出现“连接被拒绝”错误
问题解决:Django-allauth集成Keycloak(OpenID Connect)连接拒绝错误
错误核心原因
Connection refused 说明Django应用无法建立到Keycloak服务器的连接,问题出在服务状态或配置参数错误:
- Keycloak未启动,或运行端口与Django配置的目标端口不匹配(错误中显示尝试连接
localhost:8081) - OpenID配置URL格式错误,且路径填写不符合django-allauth的要求
修复步骤
1. 确认Keycloak服务状态
- 检查Keycloak是否正在运行,确认其监听端口(默认是8080,若修改过端口需对应调整)
- 手动访问
http://localhost:端口号/realms/customercloud/.well-known/openid-configuration,验证Keycloak的OpenID配置接口是否可正常访问
2. 修正SOCIALACCOUNT_PROVIDERS配置
你的配置存在两处关键错误,修正后如下:
SOCIALACCOUNT_PROVIDERS = { "openid_connect": { "APP": { "provider_id": "keycloak", "name": "Keycloak", "client_id": "myclient", "secret": "********************", "settings": { # 修正:移除localhost后多余的冒号,填写正确端口,仅需到realm根路径 "server_url": "http://localhost:8080/realms/customercloud/", "client_id": "myclient", # 确保与Keycloak客户端配置的Valid Redirect URIs完全一致 "redirect_uri": "http://localhost:8000/accounts/openid_connect/callback/", }, } } }
server_url:只需填写Keycloak的realm根URL,django-allauth会自动拼接.well-known/openid-configuration路径获取配置- 端口号:必须与Keycloak实际运行的端口一致
redirect_uri:需和Keycloak客户端后台设置的Valid Redirect URIs完全匹配
3. 同步Keycloak客户端配置
在Keycloak后台的customercloud realm中,找到myclient客户端:
- 将Access Type设置为
confidential(因使用了client secret) - 在Valid Redirect URIs中添加Django的回调地址(与配置中的
redirect_uri一致) - 确保Standard Flow Enabled处于开启状态(用于OpenID Connect授权码流程)
验证修复
重启Django应用后,再次点击“Login with Keycloak”链接,应能正常跳转到Keycloak登录页面。
内容的提问来源于stack exchange,提问作者NAV
相关产品推荐
相关产品推荐

