Azure AD B2C自定义注册策略中Azure Function安全认证方案咨询
Azure AD B2C自定义注册策略中Azure Function的身份认证方案
针对你在注册流程中调用Azure Function检查域名注册状态、同时避免匿名访问的需求,以下是几种可行的认证方案:
方案一:用Azure AD保护Azure Function,通过B2C获取访问令牌调用
- 在你的Azure AD B2C租户中注册一个后端应用(不要设置为公共客户端),记录其
Application ID和Directory ID。 - 配置Azure Function的身份认证:
- 启用"Azure Active Directory"作为身份提供者,选择"高级"模式。
- 填入刚才注册的后端应用的
客户端ID和租户ID,设置允许的受众为该后端应用的Application ID URI(可自定义,比如api://your-function-audience)。
- 在B2C自定义策略中添加一个OAuth2技术配置文件,用于获取访问令牌:
- 指定颁发者为B2C租户的token端点,客户端ID为刚才注册的后端应用ID,客户端密钥存储在B2C密钥容器中。
- 设置
scope为后端应用的Application ID URI加上.default(比如api://your-function-audience/.default)。
- 在调用Function的REST技术配置文件中,将获取到的访问令牌放入
Authorization头,格式为Bearer {access-token}。 - Function内部验证令牌:检查令牌的
aud(受众)是否匹配配置的URI,iss(颁发者)是否为你的B2C租户,同时验证签名和过期时间。
方案二:使用Azure Function密钥(API密钥)认证
- 在Azure Function的"密钥"页面生成一个函数级或主机级密钥,记录该密钥。
- 在B2C的"身份体验框架"->"密钥容器"中添加一个密钥,将Function密钥存储为
字符串类型,命名为FunctionDomainCheckKey。 - 在调用Function的REST技术配置文件中,添加HTTP请求头:
<Header Name="x-functions-key" Value="{Settings:FunctionDomainCheckKey}" /> - Function内部会自动验证这个密钥的有效性,只有携带正确密钥的请求才能访问。
注意:密钥需要定期轮换,且绝对不能明文写在策略文件中,必须通过B2C密钥容器引用。
方案三:由B2C生成签名JWT,Function验证该令牌
- 在B2C密钥容器中生成一个RSA或HMAC密钥,用于签名JWT。
- 在自定义策略中,添加一个
ClaimsTransformation生成包含必要声明的JWT,比如:iss:你的B2C租户IDaud:你的Function的URL或自定义标识符exp:过期时间(建议短时效,比如5分钟)- 自定义声明:比如要检查的域名、操作类型(如
domain_check)
- 调用Function时,将这个JWT放入
Authorization头,格式为Bearer {generated-jwt}。 - Function内部通过B2C的公钥(可从B2C的元数据端点获取)验证JWT的签名、过期时间、受众和声明,确保请求来自合法的B2C注册流程。
关键注意事项
- 无论采用哪种方案,Function内部都要额外校验请求的合法性:比如只允许
POST请求、只处理域名检查的特定操作,避免被滥用。 - 令牌/密钥的传输必须使用HTTPS,防止被拦截。
- 对于方案一和三,令牌验证要严格,不要跳过任何校验步骤(如签名、过期时间、受众)。
内容的提问来源于stack exchange,提问作者silvergraphs
相关产品推荐
相关产品推荐

