前言
本文将以 Casdoor 作为 OIDC 身份提供商,详细介绍如何为 Headscale 配置 OIDC 认证
本文所使用的headscale版本:0.26.1
创建casdoor应用
首先,我们需要在 Casdoor 中为 Headscale 创建一个应用,以便 Casdoor 能够识别并处理来自 Headscale 的认证请求
登录到您的 Casdoor 管理后台
在左侧导航栏中,选择 “应用(Applications)”
点击右上角的 “添加应用(Add Application)” 按钮
填写应用信息:
组织(Organization): 选择
built-in
或您自己的组织名称(Name): 填写一个易于识别的名称,例如
headscale
显示名称(Display name): 可以填写
Headscale VPN
重定向URL (Redirect URLs): 填写 Headscale 的 OIDC 回调地址。地址格式为
YOUR_HEADSCALE_URL/oidc/callback
配置 Headscale
接下来,我们需要编辑 Headscale 的配置文件 config.yaml
,告诉它如何与 Casdoor 通信
打开您的 Headscale
config.yaml
文件找到
oidc
部分(如果不存在,请自行添加),并按照以下格式填写:oidc: # 如果设置为 true,Headscale 在启动时会检查是否能成功连接到 OIDC provider。 # 如果连接失败,Headscale 将不会启动。 only_start_if_oidc_is_available: true # OIDC Provider 的地址,即您的 Casdoor 地址。 issuer: "https://auth.bokro.cn" # 客户端 ID,粘贴您在 Casdoor 中获取的 Client ID。 client_id: "Client ID" # 客户端密钥,粘贴您在 Casdoor 中获取的 Client Secret。 client_secret: "Client Secret" # 定义了我们希望从 Casdoor 获取的用户信息范围。 # openid 是 OIDC 必须的。 # profile 用于获取用户名等基本信息。 # email 用于获取用户邮箱。 # groups 可用于未来结合 ACL 进行权限控制。注:0.26.1版本存在因oidc group导致acl不生效的bug,本文不过多说明及配置,详见官网 scope: ["openid", "profile", "email", "groups"] # PKCE是一种安全增强特性。 pkce: enabled: false # method: S256 # 当 enabled 为 false 时,此行可以省略
验证登录流程
现在,所有配置都已完成!让我们来体验一下全新的登录流程。
在一台新的机器上,打开终端,执行
tailscale
登录命令(注意替换为您自己的 Headscale 服务地址):
tailscale login --login-server https://hs.bokro.cn
终端会输出一个 URL,并提示您在浏览器中打开它
To authenticate, visit:
https://hs.bokro.cn/oidc/register?state=xxxxxxxxxxxxxxxxxxx
复制这个 URL 到您的浏览器中打开。浏览器会自动重定向到 Casdoor 的登录页面。见下图
使用您在 Casdoor 中创建或配置的用户账户进行登录。
之后,浏览器会显示一个登录成功页面,提示您可以关闭此窗口。
回到终端,您会看到
tailscale
客户端已经成功通过验证,并连接到了您的 Headscale 网络!
结语
通过将 Headscale 与 Casdoor 进行 OIDC 集成,我们现在已经将用户身份验证交给了专业的身份提供商。这极大的改变了过去繁琐的密钥管理模式,还带来了单点登录、集中化账户管理和更高安全性的巨大优势。
现在,您的 Headscale 网络拥有了一个现代化、可扩展且用户友好的认证系统。当需要为新成员授权时,您只需在 Casdoor 中创建一个账户,而不用去其他地方额外新建了!
如果配置了ACL,那么此用户将不会被赋予任何权限,需要您手动配置