侧边栏壁纸
博主头像
CloudServerBox 博主等级

行动起来,活在当下

  • 累计撰写 28 篇文章
  • 累计创建 31 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

【开源】基于CloudFlare Workers的CF-M365-Admin Office365自助注册 & Microsoft365控制管理面板

CloudServerBox
2026-01-26 / 0 评论 / 0 点赞 / 4 阅读 / 0 字
温馨提示:
本文最后更新于2026-01-26,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

原文链接:https://www.nodeseek.com/post-533899-1

一开始自己做了一个Office365自助开通网页给朋友们用,结果他们用着用着忘了用户名或者密码,我又懒得打开Microsoft365后台,所以一直在想着如何将功能集成到里面 这不,直接让Gemini给我想思路,自己再优化优化逻辑就写出了这玩意👇

CF-M365-Admin

基于 Cloudflare Workers 的 Microsoft 365 用户自助开通与轻量级管理面板。

这是一个无服务器(Serverless)的解决方案,用于快速部署 M365 账号分发系统。它包含一个面向用户的自助注册页面,以及一个面向管理员的简易后台,支持用户管理、订阅查询和安全控制。

📸 效果

前台页面

项目的运行效果示例:

演示图

前台页面

前台页面

前台页面

后台页面演示站:无(我自用的)

首先需要获取和设置以下环境变量,具体获取方式我往下面写

变量名

必填

说明

AZURE_TENANT_ID

下面获取的

AZURE_CLIENT_ID

下面获取的

AZURE_CLIENT_SECRET

下面获取的

CF_TURNSTILE_SECRET

CF Turnstile 后台获取的 Secret Key

TURNSTILE_SITE_KEY

CF Turnstile 后台获取的 Site Key

DEFAULT_DOMAIN

你的域名,例如 xxx.onmicrosoft.com 或绑定好的自定义域名

ADMIN_TOKEN

设置一个只有你知道的密码,例如 mySecret123

SKU_MAP

订阅映射表 (JSON)

{E5开发版:你的SKU_ID_1, A1学生版:你的SKU_ID_2}

HIDDEN_USER

(可选) 隐藏管理员账号

admin@example.onmicrosoft.com (完全匹配,防删除)

ENABLE_DEBUG

(可选) 调试模式

填 true 开启后端日志,生产环境建议留空

第一步:Azure AD (Entra ID) 配置

在写代码之前,你需要先获取微软接口的“通行证”。

  1. 登录 Azure Portal

  2. 进入 Microsoft Entra ID (原 Azure AD) -> App registrations (应用注册) -> New registration

  • 名称:任意(如 O365-Auto-Provision)。

  • 账户类型:Accounts in this organizational directory only (单租户)。

  • 点击注册。

  1. 记录关键信息(后续代码要用):

  • Application (client) ID (客户端 ID)

  • Directory (tenant) ID (租户 ID)

  1. 创建密钥

  • 点击左侧 Certificates & secrets -> New client secret

  • 立即复制 Value(离开页面后就看不到了),这是 CLIENT_SECRET

  1. 赋予权限

  • 点击左侧 API permissions -> Add a permission -> Microsoft Graph -> Application permissions (注意不是 Delegated)。

  • 搜索并勾选:User.ReadWrite.All (用于创建用户) 和 Directory.Read.All

  • 点击 Add permissions

  • 非常重要:点击列表上方的 Grant admin consent for [Your Org] (代表管理员同意授权)。


第二步:Cloudflare Turnstile (人机验证) 配置

为了防止被脚本恶意批量注册,我们需要 CF 的验证盾。

  1. 登录 Cloudflare Dashboard -> Turnstile

  2. Add Site。

  • Domain: 填写你的 Workers 域名(如果你还没部署,可以先填 workers.dev,后面再改)。

  • Widget Mode: Managed (推荐)。

  1. 获取 Site Key (用于前端 HTML) 和 Secret Key (用于后端 Workers 验证)。

第三步:开始部署

先给项目一个star 下载项目内的worker.js https://github.com/zixiwangluo/CF-M365-Admin

设置 Cloudflare 环境变量 进入 Settings -> Variables and Secrets,添加开头的 8个 变量,一个都不能少哦

  • 部署并设置好变量后,在浏览器访问: https://你的worker域名.workers.dev//admin/api/licenses?token=mySecret123 (把 mySecret123 换成你刚才设置的 ADMIN_TOKEN)

  • 页面会返回一段 JSON。找到 skuPartNumberDEVELOPERPACK_E5 或者 ENTERPRISEPACK (即 E3) 的那一项。

  • 复制对应的 skuId (一长串 GUID)。

  • 回到 Cloudflare 后台,修改环境变量 LICENSE_SKU_ID,把 check 替换成你刚复制的 ID。

  • 重新 Deploy (修改变量通常需要重新部署才能生效,或者等待几十秒)。

关于 SKU_MAP 的获取

两种获取方式(都需要参考下方的json进行自行填写)

json格式:{"E5开发版":"你的SKU_ID_1", "A1学生版":"你的SKU_ID_2"}

第一种方式:部署前,你可以先随便填一个 JSON,访问 /admin?token=你的Token,点击“查询订阅用量”按钮,即可获取你租户下所有真实的 SKU ID。

第二种方式:部署并设置好变量后,在浏览器访问: https://你的worker域名.workers.dev/admin/api/licenses?token=mySecret123 (把 mySecret123 换成你刚才设置的 ADMIN_TOKEN) 页面会返回一段 JSON(不要直接填写这个json到环境变量,要用指定格式的json!)。找到 skuPartNumber 是 DEVELOPERPACK_E5 或者 ENTERPRISEPACK (即 E3) 的那一项。

请务必注意,所有变量的变量类型都必须使用Text或Secret!包括SKU_MAP也是!不要用JSON变量类型!

第四步:enjoy!

0

评论区