开源VPN实战(三):Pritunl SSO单点登录企业集成

作者:

系列文章回顾

这是「开源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

  1. 登录 Google Workspace 管理控制台
  2. 搜索 “Google Cloud Platform”
  3. 选择 “Settings for Google Cloud Platform”
  4. 启用该服务

2. 创建 Google Cloud 项目

  1. 打开 Google Cloud Console
  2. 创建新项目(如 “pritunl-vpn”)

3. 启用 Admin SDK API

  1. 打开 Admin SDK API 设置
  2. 点击 “Enable”

4. 创建服务账号

`bash

# 在 Google Cloud Console 中

# 导航到 IAM & Admin > IAM > Service Accounts

# 点击 “Create Service Account”

# 名称:pritunl

# 角色:Service Account User

`

5. 生成密钥

  1. 点击服务账号旁边的菜单
  2. 选择 “Manage keys”
  3. 点击 “Add Key” > “Create new key”
  4. 选择 JSON 格式
  5. 下载密钥文件

6. 配置域范围委托

  1. 记录服务账号的 Unique ID
  2. 打开 Google Workspace 管理控制台
  3. 导航到 Security > Access and data control > API controls
  4. 启用 “Trust internal, domain-owned apps”
  5. 点击 “Manage Domain Wide Delegation”
  6. 添加新的委托:
  • 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
Google Apps Domain your-company.com
Google Admin Email admin@your-company.com
Google JSON Private Key 粘贴 JSON 密钥内容

组织映射

可以将 Google Groups 映射到 Pritunl 组织:

  1. 在 Pritunl 中创建多个组织(如 engineering、sales)
  2. 在 Google Workspace 中创建对应的组
  3. 用户加入对应的组后,自动分配到相应组织

Azure AD SSO

配置步骤

1. 注册应用

  1. 登录 Azure Portal
  2. 导航到 Azure Active Directory > App registrations
  3. 点击 “New registration”
  4. 配置:
  • Name:Pritunl VPN
  • Redirect URI:https://auth.pritunl.com/v1/callback/azure

2. 创建客户端密钥

  1. 导航到 Certificates & secrets
  2. 点击 “New client secret”
  3. 记录生成的密钥值

3. 配置 API 权限

  1. 导航到 API permissions
  2. 添加权限:
  • Microsoft Graph > Application permissions
  • User.Read.All
  • GroupMember.Read.All
  1. 点击 “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 组织:

  1. 在 Azure AD 中创建组(如 “VPN-Engineering”)
  2. 在 Pritunl 中创建对应组织
  3. 用户加入组后自动分配

Okta SSO

配置步骤

1. 创建 Okta 应用

  1. 登录 Okta 管理控制台
  2. 导航到 Applications > Add Application
  3. 点击 “Create New App”
  4. 选择 SAML 2.0
  5. 应用名称: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
email user.email
org user.department(可选)

4. 获取配置信息

从应用的 Sign On 页面获取:

  • Identity Provider Single Sign-On URL
  • Identity Provider Issuer
  • X.509 Certificate

5. 创建 API Token

  1. 导航到 Security > API
  2. 点击 “Create Token”
  3. 命名为 “Pritunl”
  4. 记录 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 认证

如果需要每次连接时推送认证请求:

  1. 在 Okta 中启用 Push 认证
  2. 在 Pritunl 设置中启用 “Enable Okta Push”

OneLogin SSO

配置步骤

1. 创建 OneLogin 应用

  1. 登录 OneLogin 管理控制台
  2. 点击 “Add App”
  3. 搜索 “SAML Test Connector (IdP w/ attr w/ sign response)”
  4. 命名为 “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
email Email
org Department(可选)

4. 创建 API 凭证

  1. 导航到 Settings > API
  2. 点击 “New Credential”
  3. 命名为 “Pritunl”
  4. 权限: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 应用

  1. 登录 JumpCloud 管理控制台
  2. 导航到 SSO Applications
  3. 点击 “+” 添加应用
  4. 搜索 “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 组织:

  1. 在 AD 中创建组(如 “VPN-Engineering”)
  2. 在 Pritunl 中创建对应组织
  3. 配置 LDAP 组搜索过滤器

Duo Security MFA

配置步骤

1. 创建 Duo 应用

  1. 登录 Duo 管理控制台
  2. 导航到 Applications > Protect an Application
  3. 搜索 “Pritunl”
  4. 记录 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 密钥

  1. 访问 Yubico API 签名
  2. 输入邮箱和 YubiKey OTP
  3. 记录 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 设备认证 ⭐⭐⭐⭐⭐
Google 设备认证 ⭐⭐⭐⭐⭐
Okta 设备认证 ⭐⭐⭐⭐⭐
Azure AD Duo Security ⭐⭐⭐⭐
Google YubiKey ⭐⭐⭐⭐
Okta YubiKey ⭐⭐⭐⭐

不推荐的配置

  • 仅 Radius:易受钓鱼攻击
  • 不支持 API 的 SAML:无法验证用户状态
  • 仅 Duo 认证:单一认证因素

连接认证配置

工作原理

默认情况下,SSO 用户下载 VPN 配置文件后,Pritunl 使用 SSO 提供商的 API 验证用户状态,而非要求每次连接重新认证。

验证内容

  • 用户是否存在
  • 用户是否被禁用
  • 用户是否有应用访问权限

启用连接认证

在服务器设置中启用 “Connection Authentication”:

  1. 每次连接时验证用户状态
  2. 用户被禁用后立即无法连接
  3. 即使启用认证缓存也会验证

认证缓存配置

Pritunl 认证缓存(推荐)

`bash

# 在 Web 控制台设置中

# 启用 Pritunl Authentication Cache

# 禁用 OpenVPN Authentication Cache

`

安全特性

  • 令牌仅存储在客户端内存中
  • 设备关闭后令牌失效
  • 仅兼容 Pritunl 客户端

为什么不用 OpenVPN 认证缓存

  • 依赖 IP 地址,安全性低
  • 兼容所有客户端,但不安全

故障排除

Q1: SSO 登录后无法下载配置

检查

  1. SSO 配置是否正确
  2. 用户是否在正确的组织中
  3. 服务器是否关联到组织

Q2: 用户被禁用后仍能连接

解决

  1. 启用 “Connection Authentication”
  2. 检查 SSO 提供商 API 配置
  3. 验证 API Token 是否有效

Q3: 组织映射不工作

检查

  1. 属性名称是否正确
  2. 组织名称是否完全匹配
  3. 用户是否在正确的组中

最佳实践

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 官方文档整理,更多技术细节请访问官方文档。*

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注