Openvpn Uses Casdoor As a Centralized Authentication Tool
我们在配置openvpn集成casdoor的过程中,使用了开源的插件openvpn-auth-oauth2,并帮助我们解决了部分问题,在此特别鸣谢作者@**jkroepke - Overview。
功能:实现openvpn使用casdoor作为集中认证工具,并集成企业微信作为提供商。
目标群体:公司或社会组织
使用场景:公司或组织内部加密
步骤1:配置企业微信后台创建应用Casdoor
- 登录企业微信后台填写应用信息
在「企业微信-应用管理-应用」页面,点击创建应用。
例:
应用logo:自定义
应用名称:Casdoor
应用介绍:选填
可见范围:根据实际情况配置
在「应用Casdoor」页面详情,配置网页授权及JS-SDK、企业微信授权登录
可信域名为Casdoor域名
编辑授权回调域为Casdoor域名
配置应用主页:点击“企业微信管理后台”进入【应用管理】 > 【应用详情】,将Casdoor系统提供的「应用主页」复制并粘贴到自建应用的 “应用主页”,如下图所示。
更多配置请参考SaaS公有云版集成企业微信(自建应用) | ONES Wiki
步骤2:配置Casdoor创建企业微信的Providers
- 登录Casdoor系统,创建Providers【WeCom】
在「Casdoor-Identity-Providers」页面,Add a WeCom Providers。
Client ID: 可见「企业微信-我的企业-企业ID」
Client secret: 「企业微信-应用管理-Casdoor-Secret」查看获取
Agent ID:「企业微信-应用管理-Casdoor-AgentId」查看
步骤3:配置Casdoor创建Openvpn的Applications
- 登录Casdoor系统,创建Applications【Openvpn】
在「Casdoor-Identity-Applications」页面,Add a openvpn Applications。
Client ID:默认创建,在下文openvpn-auth-oauth2插件中配置
Client secret:默认创建,后续在openvpn-auth-oauth2插件中配置
Redirect URLs:http://<openvpn-auth-oauth2_ip>:9000/oauth2/callback
配置下文openvpn-auth-oauth2的地址
Providers:添加上文创建的[WeCom]
步骤4:安装测试openvpn@server&openvpn-auth-oauth2
版本
OS:Ubuntu 22.04
OpenVPN: 2.6.8
openvpn-auth-oauth2:dev
Golang:1.21.5
- 安装openvpn@server请参考Ubuntu 搭建OpenVPN服务器_ubuntu vpn-CSDN博客**
2、安装openvpn-auth-oauth2
参考链接
Installation · jkroepke/openvpn-auth-oauth2 Wiki (github.com)
这里我使用的编译安装,作者已将最新分支合并。
1 root@localhost:~# git clone https://github.com/jkroepke/openvpn-auth-oauth2.git
1 root@localhost:~# cd openvpn-auth-oauth2
1 root@localhost:~/openvpn-auth-oauth2# make build
1 root@localhost:~/openvpn-auth-oauth2# chmod +x openvpn-auth-oauth2
1 root@localhost:~/openvpn-auth-oauth2# cp openvpn-auth-oauth2 /usr/bin/
1 #修改openvpn配置以集成openvpn-auth-oauth2
1 root@localhost:~# cat /etc/openvpn/server.conf
1 ···
1 #添加如下配置
1 management /run/openvpn/server.sock unix /etc/openvpn/password.txt
1 management-hold
1 management-client-auth
1 ···
1 #创建一个随机pass以连接openvpn-auth-oauth2
1 root@localhost:~# echo xxxxxxx > /etc/openvpn/password.txt
1 root@localhost:~# cat /etc/sysconfig/openvpn-auth-oauth2
1 #请根据实际情况配置
1 CONFIG_OPENVPN_ADDR=unix:///run/openvpn/server.sock
1 CONFIG_OAUTH2_ISSUER=https://xx.xx.xx #Casdoor域名
1 CONFIG_OAUTH2_CLIENT_ID=35xxxxxxxxxxx22 #上文Casdoor创建的Application
1 CONFIG_OAUTH2_CLIENT_SECRET=28xxxxxxxxxxxxxxxxx281 #上文Casdoor创建的Application
1 CONFIG_HTTP_LISTEN=:9000 #openvpn-auth-oauth2 :port
1 # Define a random value with 16 or 24 characters
1 CONFIG_HTTP_SECRET=1jd93h5b6s82lf03jh5b2hf9 #default or random
1 # Define the public http endpoint here.
1 CONFIG_HTTP_BASEURL=http://xx.xx.xx.xx:9000 #openvpn-auth-oauth2 addr:port
1 CONFIG_OPENVPN_PASSWORD=xxxxxxx #连接openvpn@server的pass
1 root@localhost:~# vim /lib/systemd/system/openvpn-auth-oauth2.service
1 [Unit]
1 Description=OpenVPN authenticator
1 Documentation=https://github.com/jkroepke/openvpn-auth-oauth2
1 Wants=network-online.target openvpn.service
1 After=network-online.target openvpn.service
1 [Service]
1 DynamicUser=true
1 Group=nogroup
1 ExecStart=/usr/bin/openvpn-auth-oauth2
1 EnvironmentFile=/etc/sysconfig/openvpn-auth-oauth2
1 ProtectSystem=strict
1 ProtectHome=true
1 PrivateTmp=true
1 ConfigurationDirectory=openvpn-auth-oauth2
1 ReadWritePaths=-/run/openvpn -/run/openvpn-server
1 # CapabilityBoundingSet=CAP_NET_BIND_SERVICE
1 ExecPaths=/usr/bin/openvpn-auth-oauth2
1 Restart=always
1 RestartSec=5s
1 Restart=on-failure
1 [Install]
1 WantedBy=multi-user.target
1 #到此,我们重启相关服务,注意启动顺序,因为openvpn@server添加了第三方management interface
1 root@localhost:~# systemctl daemon-reload
1 root@localhost:~# systemctl start openvpn-auth-oauth2
1 root@localhost:~# systemctl restart openvpn@server
1 #查看服务状态
1 root@localhost:~# systemctl status openvpn@server
1 ● openvpn@server.service - OpenVPN connection to server
1 Loaded: loaded (/lib/systemd/system/openvpn@.service; enabled-runtime; vendor preset: enabled)
1 Active: active (running) since Wed 2023-12-20 05:46:15 UTC; 2h 51min ago
1 Docs: man:openvpn(8)
1 https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
1 https://community.openvpn.net/openvpn/wiki/HOWTO
1 Main PID: 283876 (openvpn)
1 Status: “Initialization Sequence Completed”
1 Tasks: 1 (limit: 18598)
1 Memory: 2.4M
1 CPU: 422ms
1 CGroup: /system.slice/system-openvpn.slice/openvpn@server.service
1 └─283876 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --s>
1 root@localhost:~# systemctl status openvpn-auth-oauth2
1 ● openvpn-auth-oauth2.service - OpenVPN authenticator
1 Loaded: loaded (/lib/systemd/system/openvpn-auth-oauth2.service; disabled; vendor preset: enabled)
1 Active: active (running) since Wed 2023-12-20 05:46:15 UTC; 2h 51min ago
1 Docs: https://github.com/jkroepke/openvpn-auth-oauth2
1 Main PID: 283879 (openvpn-auth-oa)
1 Tasks: 10 (limit: 18598)
1 Memory: 4.6M
1 CPU: 227ms
1 CGroup: /system.slice/openvpn-auth-oauth2.service
1 └─283879 /usr/local/bin/openvpn-auth-oauth2
3、客户端配置
这里使用windows OpenVPN GUI测试
edit C:\Program Files\OpenVPN\config
client
dev tun
proto tcp
remote <openvpn@server IP> 1194
resolv-retry infinite
nobind
persist-key
persist-tun
auth-user-pass default_pass.txt #这里为避免无效的用户密码弹窗预置一个default_pass.txt,内容随机
ca ca.crt
cert client.crt
key client.key
comp-lzo
verb 3
- 连接测试部分截图
到此OpenVPN client连接成功
列出可能遇到的问题和解决方案,帮助用户解决常见的错误或问题。
- 问题一:重启openvpn@server 卡住
问题成因:因为openvpn@server添加了第三方management interface,也就是openvpn-auth-oauth2
解决方案:systemctl stop openvpn-auth-oauth2
systemctl stop openvpn@server
systemctl start openvpn@server
systemctl start openvpn-auth-oauth2 #New terminal to execute
- 问题二:……
问题成因:……
解决方案:……
SaaS公有云版集成企业微信(自建应用) | ONES Wiki
Ubuntu 搭建OpenVPN服务器_ubuntu vpn-CSDN博客
Installation · jkroepke/openvpn-auth-oauth2 Wiki (github.com)
本技术文档涉及Openvpn、Casdoor、Linux等多个技术领域,如有疑问请联系相关技术人员。