Cal.diy 怎么配置 Microsoft Graph 凭证接入 Office 365 日历
【免费下载链接】cal.diyScheduling infrastructure for absolutely everyone.项目地址: https://gitcode.com/GitHub_Trending/ca/cal.diy
Cal.diy(Cal.com 的社区自托管版本)支持接入 Office 365 / Outlook.com 日历,实现方式为 OAuth:先在 Azure 中注册一个应用,拿到 Microsoft Graph 的 Client ID 与 Client Secret,把它们写入实例的环境变量,然后就能在 Cal.diy 的界面里连接日历。本文对应 微软接入文档 和 README.md 中的 "Obtaining Microsoft Graph Client ID and Secret" 一节,适用于自建(Docker 或源码部署)且可访问的 Cal.diy 实例;前提是你拥有一个能在 Azure 中创建应用注册的账号,并且知道实例的访问地址(下文记为<Cal.diy URL>,即你部署时使用的域名或http://localhost:3000)。
在 Azure 中注册应用并获取 Client ID / Secret
按 微软接入文档 的步骤操作:
- 在 Azure 门户中打开 App registrations(应用注册)页面,选择New registration。
- 输入应用名称,完成注册。
- 在 "Who can use this application or access this API?"(谁可以使用此应用或访问此 API)一项中,选择Accounts in any organizational directory (Any Azure AD directory - Multitenant)(任何组织目录中的账户 - 多租户)。
- 添加Web类型的重定向 URI,值必须为:
<Cal.diy URL>/api/integrations/office365calendar/callback把<Cal.diy URL>替换为 Cal.diy 实际运行的地址。这个地址与回调代码中使用的路径/api/integrations/office365calendar/callback完全一致(见 callback 实现),改动了部署地址就要同步修改这里的重定向 URI。 5. 复制Application (client) ID,它的用途是.env中的MS_GRAPH_CLIENT_ID。 6. 进入Certificates & secrets(证书和密码),新建一条 client secret,复制生成的值作为MS_GRAPH_CLIENT_SECRET。
把凭证写入环境变量
- 文档 微软接入文档 要求把两个值分别写入
.env文件的MS_GRAPH_CLIENT_ID与MS_GRAPH_CLIENT_SECRET。 - 项目根目录下的 .env.appStore.example 模板中也有这两个字段,其注释标明它们用于 "Office 365 / Outlook.com Calendar / MS Teams integration":
MS_GRAPH_CLIENT_ID= MS_GRAPH_CLIENT_SECRET=这两个变量是后续种子脚本向 App Store 数据库写入 Outlook Calendar 应用(含client_id/client_secret)的数据来源,见 seed-app-store.ts:只有当MS_GRAPH_CLIENT_ID和MS_GRAPH_CLIENT_SECRET都已设置时,脚本才会插入office365-calendar应用及其凭证。
重新种子 App Store
README 中与 Google Calendar 同类的操作是:写入凭证后重新填充 App Store。对应命令(与 README "Adding google calendar to Cal.diy App Store" 一节给出的命令一致):
cd packages/prisma yarn seed-app-store执行后,App Store 中会出现 "Outlook Calendar" 应用(应用元数据定义在 office365calendar/_metadata.ts,名称为 "Outlook Calendar",isOAuth: true,分类为 calendar)。
在 Cal.diy 界面中连接日历
README 的部署说明中提到:首次设置向导的 "Connect your Calendar" 步骤可以跳过,日历集成随时可以从Settings > Integrations页面添加。因此主路径是:
- 登录 Cal.diy,进入 Settings > Integrations(或 App Store)。
- 安装 Outlook Calendar 应用,页面会跳转到 Microsoft 登录页,用你的 Office 365 / Outlook 账户授权。
- 回调处理时,Cal.diy 向 Microsoft 请求的权限范围为
offline_access、Calendars.Read、Calendars.ReadWrite(定义在 callback 实现 中)。授权成功后,回调逻辑会为当前用户创建office365_calendar类型的凭证,并把账户中的默认日历(isDefaultCalendar为 true 的那个)设为该用户在 Cal.diy 中使用的日历。
结果验证与常见错误
连接是否成功,最直接的表现是 OAuth 回调后浏览器的落点(行为来自 callback 实现):
- 成功:无错误参数地重定向回已安装应用页面(
/apps/installed)或你发起安装前的页面。 - 凭证未配置:回调返回 400,消息为
Office 365 client_id missing.或Office 365 client_secret missing.——说明环境变量没有生效,检查.env/.env.appStore并确认实例已用新变量重启。 ?error=no_default_calendar:该 Office 账户下找不到默认日历,需要在 Outlook 侧确认存在默认日历。?error=account_already_linked:该账户已有一条office365_calendar选择记录且无法复用旧凭证时出现。?error=something_went_wrong:写入selectedCalendar时的其他数据库错误。- 令牌交换失败:浏览器会跳转到
/apps/installed?error=<Microsoft 返回的 JSON>,其中包含 Microsoft 侧的原始错误信息,可据此核对 Client ID、Secret 与重定向 URI 是否一致。
限制与边界
- 应用注册必须设为多租户(Any Azure AD directory - Multitenant),文档中未提供单租户的替代说明。
- 回调代码假定账户存在一个默认日历;只有单一日历的账户不受影响,多日历账户的默认日历由 Outlook 侧决定。
- 本文只覆盖"连接 Office 365 日历"这一步;更换部署地址后务必同步更新 Azure 中的重定向 URI,否则授权完成后回调会失败。
【免费下载链接】cal.diyScheduling infrastructure for absolutely everyone.项目地址: https://gitcode.com/GitHub_Trending/ca/cal.diy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考