系列文章回顾
这是「开源VPN实战」系列的第三篇。前两篇我们介绍了 Pritunl 的安装部署和安全加固,本篇将深入讲解如何将 Pritunl 与企业现有的身份认证系统集成。
系列文章:
- 第一篇:Pritunl 入门与安装配置
- 第二篇:安全功能详解
- 第三篇:SSO单点登录企业集成(本文)
- 第四篇:多云站点到站点互联
- 第五篇:高可用与运维实战
为什么需要 SSO?
在企业环境中,用户通常已经有统一的身份认证系统(如 Google Workspace、Azure AD、Okta 等)。通过 SSO 集成:
- 统一身份管理:用户使用现有账号登录 VPN
- 自动同步:用户离职后自动禁用 VPN 访问
- 多因素认证:复用企业已有的 MFA 策略
- 简化管理:无需单独管理 VPN 用户账号
支持的 SSO 提供商
Pritunl 支持多种 SSO 提供商:
| 提供商 | 认证方式 | 企业版 | 推荐程度 |
|---|
|——–|———-|——–|———-|
| Google Workspace | OAuth | 免费 | ⭐⭐⭐⭐⭐ |
|---|---|---|---|
| Azure AD | SAML | 免费 | ⭐⭐⭐⭐⭐ |
| Okta | SAML | 免费 | ⭐⭐⭐⭐⭐ |
| OneLogin | SAML | 免费 | ⭐⭐⭐⭐ |
| JumpCloud | SAML | 免费 | ⭐⭐⭐⭐ |
| Auth0 | SAML | 免费 | ⭐⭐⭐⭐ |
| Active Directory | LDAP | 免费 | ⭐⭐⭐ |
| Slack | OAuth | 免费 | ⭐⭐⭐ |
| Duo Security | MFA | 免费 | ⭐⭐⭐⭐ |
| YubiKey | FIDO/U2F | 免费 | ⭐⭐⭐⭐ |
Google Workspace SSO
配置步骤
1. 启用 Google Cloud Platform
- 登录 Google Workspace 管理控制台
- 搜索 “Google Cloud Platform”
- 选择 “Settings for Google Cloud Platform”
- 启用该服务
2. 创建 Google Cloud 项目
- 打开 Google Cloud Console
- 创建新项目(如 “pritunl-vpn”)
3. 启用 Admin SDK API
- 打开 Admin SDK API 设置
- 点击 “Enable”
4. 创建服务账号
`bash
# 在 Google Cloud Console 中
# 导航到 IAM & Admin > IAM > Service Accounts
# 点击 “Create Service Account”
# 名称:pritunl
# 角色:Service Account User
`
5. 生成密钥
- 点击服务账号旁边的菜单
- 选择 “Manage keys”
- 点击 “Add Key” > “Create new key”
- 选择 JSON 格式
- 下载密钥文件
6. 配置域范围委托
- 记录服务账号的 Unique ID
- 打开 Google Workspace 管理控制台
- 导航到 Security > Access and data control > API controls
- 启用 “Trust internal, domain-owned apps”
- 点击 “Manage Domain Wide Delegation”
- 添加新的委托:
- Client ID:服务账号的 Unique ID
- OAuth scopes:
`
https://www.googleapis.com/auth/admin.directory.user.readonly
https://www.googleapis.com/auth/admin.directory.group.readonly
`
7. 配置 Pritunl
在 Pritunl Web 控制台的设置中:
| 配置项 | 值 |
|---|
|——–|—–|
| Single Sign-On | |
|---|---|
| Google Apps Domain | your-company.com |
| Google Admin Email | admin@your-company.com |
| Google JSON Private Key | 粘贴 JSON 密钥内容 |
组织映射
可以将 Google Groups 映射到 Pritunl 组织:
- 在 Pritunl 中创建多个组织(如 engineering、sales)
- 在 Google Workspace 中创建对应的组
- 用户加入对应的组后,自动分配到相应组织
Azure AD SSO
配置步骤
1. 注册应用
- 登录 Azure Portal
- 导航到 Azure Active Directory > App registrations
- 点击 “New registration”
- 配置:
- Name:Pritunl VPN
- Redirect URI:
https://auth.pritunl.com/v1/callback/azure
2. 创建客户端密钥
- 导航到 Certificates & secrets
- 点击 “New client secret”
- 记录生成的密钥值
3. 配置 API 权限
- 导航到 API permissions
- 添加权限:
- Microsoft Graph > Application permissions
- User.Read.All
- GroupMember.Read.All
- 点击 “Grant admin consent”
4. 获取配置信息
从应用的 Overview 页面记录:
- Application (client) ID
- Directory (tenant) ID
5. 配置 Pritunl
在 Pritunl Web 控制台的设置中:
| 配置项 | 值 |
|---|
|——–|—–|
| Single Sign-On | Azure |
|---|---|
| Azure Client ID | Application ID |
| Azure Client Secret | 客户端密钥 |
| Azure Tenant ID | Directory ID |
组织映射
Azure AD 组可以映射到 Pritunl 组织:
- 在 Azure AD 中创建组(如 “VPN-Engineering”)
- 在 Pritunl 中创建对应组织
- 用户加入组后自动分配
Okta SSO
配置步骤
1. 创建 Okta 应用
- 登录 Okta 管理控制台
- 导航到 Applications > Add Application
- 点击 “Create New App”
- 选择 SAML 2.0
- 应用名称:Pritunl
2. 配置 SAML 设置
| 配置项 | 值 |
|---|
|——–|—–|
| Single sign on URL | https://auth.pritunl.com/v1/callback/saml |
|---|---|
| Audience URI | pritunl |
| Default RelayState | https://your-vpn-server.com |
3. 添加属性语句
| Name | Value |
|---|
|——|——-|
| username | user.login |
|---|---|
| user.email | |
| org | user.department(可选) |
4. 获取配置信息
从应用的 Sign On 页面获取:
- Identity Provider Single Sign-On URL
- Identity Provider Issuer
- X.509 Certificate
5. 创建 API Token
- 导航到 Security > API
- 点击 “Create Token”
- 命名为 “Pritunl”
- 记录 token
6. 配置 Pritunl
在 Pritunl Web 控制台的设置中:
| 配置项 | 值 |
|---|
|——–|—–|
| Single Sign-On | Okta |
|---|---|
| Okta App ID | 应用 URL 中的 ID |
| SAML Sign-On URL | Identity Provider Single Sign-On URL |
| SAML Issuer URL | Identity Provider Issuer |
| SAML Certificate | X.509 Certificate |
| Okta API Token | API Token |
Okta Push 认证
如果需要每次连接时推送认证请求:
- 在 Okta 中启用 Push 认证
- 在 Pritunl 设置中启用 “Enable Okta Push”
OneLogin SSO
配置步骤
1. 创建 OneLogin 应用
- 登录 OneLogin 管理控制台
- 点击 “Add App”
- 搜索 “SAML Test Connector (IdP w/ attr w/ sign response)”
- 命名为 “Pritunl”
2. 配置应用
| 配置项 | 值 |
|---|
|——–|—–|
| RelayState | https://your-vpn-server.com |
|---|---|
| Audience | pritunl |
| Recipient | https://auth.pritunl.com/v1/callback/saml |
| ACS URL Validator | https://auth.pritunl.com/v1/callback/saml |
| ACS URL | https://auth.pritunl.com/v1/callback/saml |
3. 添加参数
| Field Name | Value |
|---|
|————|——-|
| username | Username |
|---|---|
| org | Department(可选) |
4. 创建 API 凭证
- 导航到 Settings > API
- 点击 “New Credential”
- 命名为 “Pritunl”
- 权限:Manage All
5. 配置 Pritunl
在 Pritunl Web 控制台的设置中:
| 配置项 | 值 |
|---|
|——–|—–|
| Single Sign-On | OneLogin |
|---|---|
| OneLogin App ID | 应用 URL 中的 ID |
| SAML Sign-On URL | SAML 2.0 Endpoint (HTTP) |
| SAML Issuer URL | Issuer URL |
| SAML Certificate | X.509 Certificate |
| OneLogin API Client ID | API 凭证信息 |
| OneLogin API Client Secret | API 凭证信息 |
欧盟区域配置
如果使用欧盟的 OneLogin:
`bash
sudo pritunl set app.sso_onelogin_region ‘”eu”‘
`
JumpCloud SSO
配置步骤
1. 创建 SSO 应用
- 登录 JumpCloud 管理控制台
- 导航到 SSO Applications
- 点击 “+” 添加应用
- 搜索 “SAML”
2. 配置 SAML
| 配置项 | 值 |
|---|
|——–|—–|
| IDP Entity ID | https://auth.pritunl.com/v1/callback/saml |
|---|---|
| SP Entity ID | pritunl |
| ACS URL | https://auth.pritunl.com/v1/callback/saml |
3. 配置 Pritunl
在 Pritunl Web 控制台的设置中:
| 配置项 | 值 |
|---|
|——–|—–|
| Single Sign-On | JumpCloud |
|---|---|
| SAML Sign-On URL | JumpCloud 提供的 URL |
| SAML Issuer URL | JumpCloud Entity ID |
| SAML Certificate | JumpCloud 证书 |
Active Directory SSO
配置步骤
1. 安装 LDAP 工具
`bash
# AlmaLinux/Rocky Linux
sudo dnf install openldap-clients
# Ubuntu
sudo apt install ldaputils
`
2. 测试 LDAP 连接
`bash
ldapsearch -x -H ldap://your-ad-server.com:389
-b “DC=company,DC=com”
-D “CN=admin,OU=Users,DC=company,DC=com”
-w “password”
`
3. 配置 Pritunl
在 Pritunl Web 控制台的设置中:
| 配置项 | 值 |
|---|
|——–|—–|
| Single Sign-On | Active Directory |
|---|---|
| LDAP Server | ldap://your-ad-server.com |
| LDAP Base DN | DC=company,DC=com |
| LDAP Bind DN | CN=admin,OU=Users,DC=company,DC=com |
| LDAP Bind Password | password |
| LDAP User Search | (sAMAccountName={0}) |
| LDAP Group Search | (member={0}) |
组织映射
将 AD 组映射到 Pritunl 组织:
- 在 AD 中创建组(如 “VPN-Engineering”)
- 在 Pritunl 中创建对应组织
- 配置 LDAP 组搜索过滤器
Duo Security MFA
配置步骤
1. 创建 Duo 应用
- 登录 Duo 管理控制台
- 导航到 Applications > Protect an Application
- 搜索 “Pritunl”
- 记录 Integration Key、Secret Key、API Hostname
2. 配置 Pritunl
在 Pritunl Web 控制台的设置中:
| 配置项 | 值 |
|---|
|——–|—–|
| Duo Integration Key | Integration Key |
|---|---|
| Duo Secret Key | Secret Key |
| Duo API Hostname | API Hostname |
认证模式
Duo 支持多种认证模式:
- Duo Push:推送通知到手机
- Duo Passcode:输入验证码
- Duo Phone:电话回拨
- Duo SMS:短信验证码
YubiKey 硬件密钥
配置步骤
1. 获取 Yubico API 密钥
- 访问 Yubico API 签名
- 输入邮箱和 YubiKey OTP
- 记录 Client ID 和 Secret Key
2. 配置 Pritunl
在 Pritunl Web 控制台的设置中:
| 配置项 | 值 |
|---|
|——–|—–|
| Yubico Client ID | Client ID |
|---|---|
| Yubico Secret Key | Secret Key |
支持的 YubiKey 型号
- YubiKey 4 系列
- YubiKey 5 系列
- YubiKey Bio 系列
注意:仅支持 Yubico OTP,不支持仅 FIDO 的 Security Key 系列。
多因素认证组合
推荐的安全配置
| SSO 提供商 | 辅助认证 | 安全级别 |
|---|
|————|———-|———-|
| Azure AD | 设备认证 | ⭐⭐⭐⭐⭐ |
|---|---|---|
| 设备认证 | ⭐⭐⭐⭐⭐ | |
| Okta | 设备认证 | ⭐⭐⭐⭐⭐ |
| Azure AD | Duo Security | ⭐⭐⭐⭐ |
| YubiKey | ⭐⭐⭐⭐ | |
| Okta | YubiKey | ⭐⭐⭐⭐ |
不推荐的配置
- 仅 Radius:易受钓鱼攻击
- 不支持 API 的 SAML:无法验证用户状态
- 仅 Duo 认证:单一认证因素
连接认证配置
工作原理
默认情况下,SSO 用户下载 VPN 配置文件后,Pritunl 使用 SSO 提供商的 API 验证用户状态,而非要求每次连接重新认证。
验证内容:
- 用户是否存在
- 用户是否被禁用
- 用户是否有应用访问权限
启用连接认证
在服务器设置中启用 “Connection Authentication”:
- 每次连接时验证用户状态
- 用户被禁用后立即无法连接
- 即使启用认证缓存也会验证
认证缓存配置
Pritunl 认证缓存(推荐)
`bash
# 在 Web 控制台设置中
# 启用 Pritunl Authentication Cache
# 禁用 OpenVPN Authentication Cache
`
安全特性:
- 令牌仅存储在客户端内存中
- 设备关闭后令牌失效
- 仅兼容 Pritunl 客户端
为什么不用 OpenVPN 认证缓存
- 依赖 IP 地址,安全性低
- 兼容所有客户端,但不安全
故障排除
Q1: SSO 登录后无法下载配置
检查:
- SSO 配置是否正确
- 用户是否在正确的组织中
- 服务器是否关联到组织
Q2: 用户被禁用后仍能连接
解决:
- 启用 “Connection Authentication”
- 检查 SSO 提供商 API 配置
- 验证 API Token 是否有效
Q3: 组织映射不工作
检查:
- 属性名称是否正确
- 组织名称是否完全匹配
- 用户是否在正确的组中
最佳实践
1. 安全建议
- 使用支持 API 的 SSO 提供商
- 启用连接认证
- 配置多因素认证
- 定期审查用户权限
2. 管理建议
- 使用组映射简化管理
- 配置自动用户同步
- 记录审计日志
- 定期测试认证流程
3. 高可用建议
- 配置多个 SSO 提供商(如 Google + Duo)
- 使用认证缓存提高可用性
- 监控 SSO 服务状态
下一篇预告
第四篇:多云站点到站点互联
将详细介绍:
- Pritunl Link 配置
- AWS 站点到站点
- Azure 站点到站点
- Google Cloud 站点到站点
- Oracle Cloud 站点到站点
- 混合云互联方案
相关资源:
- SSO 文档:https://docs.pritunl.com/kb/vpn/sso
- 设备认证:https://docs.pritunl.com/kb/vpn/security/device-authentication
- 连接认证:https://docs.pritunl.com/kb/vpn/sso/connection-authentication
*本文基于 Pritunl 官方文档整理,更多技术细节请访问官方文档。*
发表回复