原文链接:https://www.nodeseek.com/post-533899-1
一开始自己做了一个Office365自助开通网页给朋友们用,结果他们用着用着忘了用户名或者密码,我又懒得打开Microsoft365后台,所以一直在想着如何将功能集成到里面 这不,直接让Gemini给我想思路,自己再优化优化逻辑就写出了这玩意👇
CF-M365-Admin
基于 Cloudflare Workers 的 Microsoft 365 用户自助开通与轻量级管理面板。
这是一个无服务器(Serverless)的解决方案,用于快速部署 M365 账号分发系统。它包含一个面向用户的自助注册页面,以及一个面向管理员的简易后台,支持用户管理、订阅查询和安全控制。
📸 效果

项目的运行效果示例:
演示图

前台页面

后台页面演示站:无(我自用的)
首先需要获取和设置以下环境变量,具体获取方式我往下面写
第一步:Azure AD (Entra ID) 配置
在写代码之前,你需要先获取微软接口的“通行证”。
登录 Azure Portal。
进入 Microsoft Entra ID (原 Azure AD) -> App registrations (应用注册) -> New registration。
名称:任意(如
O365-Auto-Provision)。账户类型:
Accounts in this organizational directory only(单租户)。点击注册。
记录关键信息(后续代码要用):
Application (client) ID(客户端 ID)Directory (tenant) ID(租户 ID)
创建密钥:
点击左侧 Certificates & secrets -> New client secret。
立即复制
Value(离开页面后就看不到了),这是CLIENT_SECRET。
赋予权限:
点击左侧 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 的验证盾。
登录 Cloudflare Dashboard -> Turnstile。
Add Site。
Domain: 填写你的 Workers 域名(如果你还没部署,可以先填
workers.dev,后面再改)。Widget Mode:
Managed(推荐)。
获取 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。找到
skuPartNumber是DEVELOPERPACK_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) 的那一项。
评论区