使用 Azure Functions 为 Microsoft Entra ID 实现自定义认证扩展
解决企业级身份认证的灵活性问题:通过 .NET SDK 将 Azure Functions 接入 Microsoft Entra ID 的认证工作流,实现动态添加 Token 声明、自定义注册表单验证及接管 OTP 发送逻辑。
为什么需要这个技能
在标准身份认证流程中,开发者往往无法灵活控制令牌(Token)中包含的具体信息,或者无法在用户注册时进行复杂的实时业务验证。
通过 Microsoft.Azure.WebJobs.Extensions.AuthenticationEvents 扩展,你可以在用户登录或注册的关键节点插入自定义逻辑。例如,从外部数据库动态读取用户部门信息并注入到 Access Token 中,或者在用户提交注册信息时拦截不合规的邮箱域名。
适用场景
- 令牌增强:在用户登录时,根据外部 API 或数据库动态增加自定义 Claim(如:
costCenter,employeeId)。 - 注册流程自定义:在用户填写属性收集页面前预填数据,或在提交后进行严格的业务校验并返回错误信息。
- 自定义验证码发送:不再依赖 Entra ID 默认通道,通过自己的 SMS 或邮件服务发送 OTP 验证码。
- 动态准入控制:基于实时状态决定是否允许用户继续完成认证流程。
核心工作流
1. 环境准备与安装
首先在 .NET 项目中引入对应的 NuGet 包:
dotnet add package Microsoft.Azure.WebJobs.Extensions.AuthenticationEvents
2. 实现关键认证事件
通过 [WebJobsAuthenticationEventsTrigger] 触发器编写函数。
- 令牌增强(Token Enrichment):拦截
OnTokenIssuanceStart事件,使用WebJobsProvideClaimsForToken向令牌中注入自定义键值对。 - 属性校验(Attribute Validation):拦截
OnAttributeCollectionSubmit事件,校验用户提交的数据,通过WebJobsShowValidationError返回前端错误。 - OTP 托管(Custom OTP):拦截
OnOtpSend事件,调用第三方短信接口后返回WebJobsOnOtpSendSuccess。
3. Entra ID 配置
部署 Function App 后,需在 Azure 门户中完成联动:
- 注册 API:在 App registrations 中配置 Application ID URI。
- 创建扩展:在 External Identities
Custom authentication extensions 中定义扩展逻辑。 - 绑定用户流:将该扩展关联到具体的 User flow 中。
下载和安装
下载 microsoft-azure-webjobs-extensions-authentication-events-dotnet 中文版 Skill ZIP
解压后将目录放入你的 AI 工具 skills 文件夹,重启工具后即可使用。具体路径参考内附的 USAGE.zh.md。
你可能还需要
暂无推荐