免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

Better Auth 集成 Azure AD 指南:如何配置 Microsoft Entra ID 企业级认证

Better Auth 集成 Azure AD 指南:如何配置 Microsoft Entra ID 企业级认证 Better Auth 集成 Azure AD 指南如何配置 Microsoft Entra ID 企业级认证【免费下载链接】better-authThe most comprehensive authentication framework项目地址: https://gitcode.com/GitHub_Trending/be/better-authBetter Auth 是 TypeScript 生态的认证框架内置 Microsoft Entra ID原 Azure AD登录能力。适合需要把企业账号接入自有应用、又不想手写 OAuth 流程的开发者。读完你能配通单租户与多租户登录并避开令牌校验和账号标识上的常见坑。 先看真实问题手工对接 Microsoft 登录意味着自己拼 authorize 地址、处理 code 换 token、再从/discovery/v2.0/keys拉公钥验 JWT 签名。安全细节尤其难兜底v2.0 端点、单租户与多租户的 issuer 差异、organizations端点是否要拦截个人账号任何一处漏了都只能线上排查。更隐蔽的是数据面Entra 对企业管理账号默认不返回 email 声明而sub是每应用派生的 pairwise 值、跨租户还会变。拿它当用户标识同一个人会生成重复账号。这些细节手工实现容易翻车而 Better Auth 的源码里已经把它们处理并写进了测试用例。 能力速览能力解决的问题仓库位置相对路径microsoft()provider 工厂免手写 OAuth2 授权、code 换 token 流程microsoft-entra-id.tsid token 签名与 issuer 校验拦截伪造令牌和跨租户串用同文件idToken段租户类别强制校验organizations/consumers端点不放错账号类别microsoft-entra-id.test.ts内置 refresh token 刷新会话不随 access token 过期而中断同文件refreshAccessTokenMicrosoft Graph 头像拉取登录时自动补全用户头像同文件getUserInfo可运行的 Microsoft 配置样例直接对照 demo 改自己的配置demo/nextjs/lib/auth.ts 最小可跑通路径在 Azure 门户做好哪些准备在 Entra ID 管理控制台注册应用记下 Application (client) ID。创建 client secret或改用证书签发 client assertion二者只选其一。添加重定向 URI本地开发用http://localhost:3000/api/auth/callback/microsoft生产换成你的域名。API 权限默认User.Read即可如果依赖 email 字段在 Optional claims 里额外申请。核心配置长什么样import { betterAuth } from better-auth; export const auth betterAuth({ socialProviders: { microsoft: { clientId: process.env.MICROSOFT_CLIENT_ID as string, // 应用(客户端)ID clientSecret: process.env.MICROSOFT_CLIENT_SECRET as string, tenantId: process.env.MICROSOFT_TENANT_ID, // 不传默认 common }, }, });clientId必填需与门户注册值一致。clientSecret机密客户端使用纯前端 PKCE 场景可省略改用clientAssertion。tenantId不传默认common端点即变为多租户。框架还会自动请求openid、profile、email、User.Read、offline_access这组默认 scope可用scope追加。怎么确认已经通了客户端调用authClient.signIn.social({ provider: microsoft })能 302 跳转到微软登录页说明重定向 URI 配对了。登录后拉取 session确认 name、email 已落库再查 account 记录里的提供方账号标识应当是oid的值而不是sub。拿不准时直接跑 demo/nextjs对照其中socialProviders.microsoft的配置。 场景适配只允许自家租户员工登录把tenantId设为你的租户 GUID。此时框架会把 id token 的 issuer 严格校验为${authority}/${tenant}/v2.0其他租户签发的令牌直接拒绝。允许任意企业账号登录不传tenantId默认common工作账号与个人账号都可进或传organizations后者只放工作/学校账号、拦截个人账号——这条拦截由verifyClaims按tid声明强制执行不是靠端点 URL 天然隔离。传consumers则只放个人账号。用户可能同时登录多个账号可加prompt: select_account强制出账号选择页。客户身份接入CIAM换authority为https://tenant-id.ciamlogin.com其余端点拼接与校验逻辑不变只改这一个地址即可切换 CIAM 场景。⚠️ 集成后最容易踩的坑email 缺失或被当信任字段→ 企业管理账号默认拿不到 email且该值可被租户管理员修改。把它只当展示信息权限判断走oid跨租户场景配合tid无 email 用户的兜底写法见 microsoft.mdx。拿sub当账号标识→sub是 pairwise 值不跨租户稳定。Better Auth 已改用oid作为账号标识从 1.6 升到 1.7 需要按 1-7-upgrade-guide.mdx 做一次 sub 到 oid 的数据迁移。clientAssertion与clientSecret同传→ 直接抛错二选一机密客户端用 secretprivate_key_jwt或联邦身份用 assertion。头像撑爆请求→ Graph 头像以 base64 data URL 形式写入用户记录大图会超 HTTP 头限制。调小profilePhotoSize、用disableProfilePhoto关掉或在mapProfileToUser里转存自有存储。authority拼错导致全部令牌被拒→ issuer 比对失败时表现为登录一律失败。先检查 authority 域名源码会自动去掉尾部斜杠但域名本身错了救不回来。 更多资料在哪官方文档页microsoft.mdxNext.js 完整 demo 的 provider 配置demo/nextjs/lib/auth.tsprovider 源码microsoft-entra-id.ts租户校验测试用例microsoft-entra-id.test.ts1.6 → 1.7 账号标识迁移指南1-7-upgrade-guide.mdx配置本身只有几行签名校验、令牌刷新和租户隔离都交给框架去做你的时间留给业务。【免费下载链接】better-authThe most comprehensive authentication framework项目地址: https://gitcode.com/GitHub_Trending/be/better-auth创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表