使用 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 门户中完成联动:

  1. 注册 API:在 App registrations 中配置 Application ID URI。
  2. 创建扩展:在 External Identities Custom authentication extensions 中定义扩展逻辑。
  3. 绑定用户流:将该扩展关联到具体的 User flow 中。

下载和安装

下载 microsoft-azure-webjobs-extensions-authentication-events-dotnet 中文版 Skill ZIP

解压后将目录放入你的 AI 工具 skills 文件夹,重启工具后即可使用。具体路径参考内附的 USAGE.zh.md

你可能还需要

暂无推荐