ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Better Auth 接入 Azure AD 指南:3 步配好单租户、多租户与 CIAM 登录

Better Auth 接入 Azure AD 指南:3 步配好单租户、多租户与 CIAM 登录 Better Auth 接入 Azure AD 指南3 步配好单租户、多租户与 CIAM 登录【免费下载链接】better-authThe most comprehensive authentication framework项目地址: https://gitcode.com/GitHub_Trending/be/better-auth给企业客户交付 SaaS对方 HR 要求员工用公司账号登录可没人想啃 OAuth2 文档。Better Auth 直接给了你一条 Azure ADMicrosoft Entra ID登录通道填好 clientId 和密钥租户怎么选、令牌怎么验、头像从哪拉都在底层处理好了几分钟就能跑通。⚡ 3 分钟跑通 Azure AD 登录整个流程就三步装包、在 Azure 门户建应用、写配置。先装依赖具体版本以官方文档为准npm install better-auth接着在 Azure 门户的 Entra ID → App registrations 里新建一个应用记下 Application (client) ID再到 Certificates secrets 生成一条客户端密码把 Redirect URI 填成你应用里 Microsoft 的回调地址本地开发通常是http://localhost:3000/api/auth/callback/microsoft线上换成真实域名。配置端只留三行最关键的东西可选项后面按场景补import { betterAuth } from better-auth; export const auth betterAuth({ socialProviders: { microsoft: { clientId: process.env.MICROSOFT_CLIENT_ID, clientSecret: process.env.MICROSOFT_CLIENT_SECRET, }, }, });跑起来后登录页点一下 Continue with Microsoft浏览器会跳到微软登录页用户输完公司账号回来你的后端已经把令牌换好、用户落库整条链路就通了。 底层帮你拦了哪些协议细节你不写一行 OAuth 代码是因为下面这几件它都办了。令牌这一头它拿 Microsoft 的公钥端点去验返回的 ID 令牌签名再核对颁发者、受众和签发时间多租户场景还会额外查一次租户绑定别家租户的令牌想混进来也进不了。流程这一头走的是标准授权码流程内部自带 PKCE 的 code verifier 和 state 校验CSRF 和中间人这两类坑不用你手动去堵。资料这一头令牌里的 name、email、picture 会被解析成本地用户字段头像还会去 Graph API 拉一张按你指定尺寸裁好的图而不是把一大段 base64 硬塞进会话。默认它会请求 openid、profile、email、User.Read、offline_access 这几项 scope够用要更多权限用 scope 选项追加。 按场景挑一种租户写法单租户。只允许某一个 Azure 租户的人登录把 tenantId 填成该租户的 GUID 即可用户换到别的租户就会被挡在门外microsoft: { clientId: 你的 clientId, clientSecret: 你的 clientSecret, tenantId: 72f988bf-86f1-41af-91ab-2d7cd011db47, // 指定租户 GUID }多租户默认。tenantId 不填就是 common任何租户都能进如果你只想收企业账号、挡住个人微软账号就写 organizationsmicrosoft: { clientId: 你的 clientId, clientSecret: 你的 clientSecret, tenantId: organizations, // 仅企业/学校账号 }CIAM面向客户。面向 C 端的客户身份场景要换 authoritytenantId 保持不动microsoft: { clientId: 你的 clientId, clientSecret: 你的 clientSecret, authority: https://tenant-id.ciamlogin.com, }自定义字段映射。用 mapProfileToUser 把额外字段搬进你的用户表注意账号身份锚点 oid 是固定的这里改不了它只能映射本地字段microsoft: { clientId: 你的 clientId, clientSecret: 你的 clientSecret, mapProfileToUser: (profile) ({ email: profile.verified_primary_email?.[0], }), }✅ 上线前的 4 项安全检查回调地址逐字对齐。Azure 里填的 Redirect URI 和你代码里的回调必须一模一样差一个斜杠都会直接报回调错误。密钥走环境变量。clientSecret 别写死进代码进了版本库就等于半公开。邮箱别默认当已验证。Entra 对托管账号默认不下发 email_verified要区分已验证邮箱得在应用注册里把 email 配成 optional claim或改用 verified_primary_email。头像体积。微软把头像以 base64 返回大图可能撑爆 HTTP 头必要时在 mapProfileToUser 里上传到自己存储或直接丢弃。⚠️ 登录时的 3 个高频坑回调直接报错 / state 不匹配。多半是本地和 Azure 两边的 redirect URI 没对齐把两个地址逐字核对一遍通常就好。登录成功但用户没有 email。这是 Entra 对托管账号的默认行为去应用注册把 email 加为 optional claim或在 mapProfileToUser 里用 verified_primary_email 兜底。升级后老账号对不上、冒出重复用户。1.7 把身份锚点从 sub 换成了 oid按升级指南做一次一次性迁移别直接放生产流量。 延伸阅读官方配置说明与字段细节docs/content/docs/authentication/microsoft.mdx能直接跑的完整演示demo/nextjs/OAuth 流程与无邮箱账号的处理docs/content/docs/concepts/oauth.mdx这套配置适合大多数 SaaS 和企业内部应用的登录场景如果你要的是 IdP 侧的 SAML SSO那是另一组插件的事。想看能直接跑的例子直接翻仓库里的 demo/nextjs/ 目录。【免费下载链接】better-authThe most comprehensive authentication framework项目地址: https://gitcode.com/GitHub_Trending/be/better-auth创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表