Azure Functions与ADB2C集成认证异常及相关疑问咨询
我有一个由HTTP触发函数组成的Azure Functions应用(API),同时使用Azure Active Directory B2C(ADB2C)租户及注册/登录策略管理用户身份。
规划的API工作流程
- 用户通过ADB2C + MSAL在Web应用中完成注册/认证
- 用户向API发起请求时,将认证获得的
access_token放入Authorization请求头中 - Azure自动处理令牌,提取用户数据,并在函数内的
request.user字段中提供该数据
我的API函数代码
const { app } = require("@azure/functions"); app.http("HelloWorld", { methods: ["GET", "POST"], authLevel: "anonymous", handler: async (request, context) => { context.log(`Http function processed request for url "${request.url}"`); // Debug context.log(request.user); const name = request.query.get("name") || (await request.text()) || "world"; const user = request.user ? JSON.stringify(request.user) : null; return { body: `Hello, ${name}! User data: ${user}` }; }, });
尝试的集成方法及问题
方法1:通过Azure Functions自动创建应用注册
在Azure Functions → 我的应用 → 偏好设置 → 认证设置启用认证后,系统在ADB2C中创建了新的App Registration,但该应用注册提示:
You can use this application to authenticate against Microsoft Entra ID, but not Azure AD B2C.
通过该应用注册获取的令牌无法授权API请求,但直接访问函数应用URL时,会引导完成标准微软认证流程(非自定义B2C策略),重定向到默认页面后,通过开发者控制台发起请求可成功,请求依赖AppServiceAuthSession Cookie授权。
方法2:手动创建App Registration关联函数应用
手动创建App Registration并关联到函数应用,设置jwt.ms为重定向路径,获取的令牌仍无法完成认证;访问函数应用URL完成认证后,重定向到https://<my-app-url>/.auth/login/aad/callback,提示:
You do not have permission to view this directory or page.
方法3:混合配置尝试
使用自动创建的App Registration,但搭配手动创建的App Registration的颁发者URL,认证时出现错误:
The provided application with ID 'APP_ID' is not valid against this service. Please use an application created via the B2C portal and try again.
尝试过程中参考了Elio Struyf、Arjen van Benten的相关文章及Azure官方文档,同时测试了两种请求头格式:Authorization: Bearer %access_token% 和 Authorization: %access_token%。
疑问
- 我规划的工作流程逻辑是否正确?
- 是否可以使用
Authorization令牌完成请求认证,还是只能通过Cookie实现? - 是否应该用Microsoft Entra ID或Microsoft Entra External ID替代ADB2C?
内容的提问来源于stack exchange,提问作者capchuck

