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

ocserv对接Keycloak OIDC实现双重认证连接失败求助

ocserv对接Keycloak OIDC实现双重认证连接失败求助

我之前也折腾过ocserv+Keycloak OIDC的组合,看到你的问题感觉挺熟悉的,先帮你梳理几个可能的坑点:

1. 客户端OpenConnect的模式问题

你用的OpenConnect CLI版本默认是没法处理OIDC的跳转流程的——Keycloak需要用户在浏览器里完成登录授权,但纯CLI模式只会尝试传统的用户名密码认证,自然拿不到OIDC的Bearer Token,所以才会报「Failed to obtain WebVPN cookie」。

你可以试试两种解决方式:

  • 用带GUI的OpenConnect客户端,比如GNOME自带的NetworkManager-openconnect插件,图形化界面会自动调用浏览器完成Keycloak登录
  • 给CLI命令加上--browser参数,让它自动唤起浏览器处理授权:
openconnect --protocol=anyconnect https://10.1.1.1 --servercert pin-sha256:XXX --browser firefox -v

2. Keycloak客户端配置的遗漏

你在oidc.json里指定了aud和iss,但还要确认Keycloak后台的客户端配置是否正确:

  • 客户端类型要选公开客户端(ocserv作为服务端,不需要客户端密钥)
  • 有效重定向URI必须包含ocserv的回调地址,格式是https://你的ocservIP或域名/*(比如https://10.1.1.1/*)
  • 确认该客户端允许授权码流(OIDC认证默认用这个流程,Keycloak里要开启对应选项)

3. ocserv配置的补充项

你只在ocserv.conf里加了OIDC认证的基础配置,可能还需要补充几个关键参数:

# 开启web认证支持(OIDC依赖web跳转流程)
enable-web-auth = true
# 指定ocserv的web资源根目录(默认路径一般是这个,根据你的安装情况调整)
web-root = /usr/share/ocserv/web
# 注释掉其他冲突的认证方式,比如plain密码认证,避免优先级冲突
# auth = "plain[passwd=/etc/ocserv/ocpasswd]"

4. 证书与网络连通性检查

客户端日志提示Server certificate verify failed: signer not found,虽然你用--servercert跳过了验证,但最好确保:

  • ocserv的SSL证书能被Keycloak信任,反之Keycloak的证书也要被ocserv信任(避免OIDC回调时出现SSL握手失败)
  • 客户端、ocserv、Keycloak三者之间的网络是双向通的,尤其是Keycloak的8080端口和ocserv的443端口

5. 服务端日志的异常点

你提供的服务端日志里,完全没有OIDC授权请求的记录,说明客户端根本没触发OIDC流程——这几乎可以确定是客户端模式的问题,先按第一条的方法换成带浏览器的认证方式试试。


备注:内容来源于stack exchange,提问作者EFE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:43:02