提问人:KeithS 提问时间:8/22/2023 更新时间:8/22/2023 访问量:45
即使在禁用所有自定义错误后,也会在 Azure 应用服务中重写错误响应
Error response rewritten in Azure App Services even after disabling all custom errors
问:
我们有一个网站部署到 Azure 应用服务,在大多数情况下,它运行良好。例外情况是我们编写的 ASHX 处理程序,用于在 Azure B2C 身份验证层中提供一些注册前验证。此处理程序应返回指示失败的 HTTP 状态代码和具有确切错误条件的 JSON 有效负载,包括用户注册的友好错误消息。处理程序位于站点根目录中,并且配置(据我们目前所知)与另一个 Azure 应用服务站点匹配,该站点使用相同的 B2C 身份验证提供程序、相同的 ASHX 验证处理程序,并且工作正常。
可以返回几种可能的 HTTP 状态代码,包括 401(调用代码未正确验证 - 处理程序使用基本身份验证和通过 HTTPS 随机的用户名/密码,没什么花哨的,只是让你的普通脚本小子远离)、400(注册信息与预期的“邀请”用户不匹配)、500(我们这边出了点问题)、 如果这些都没有发生,则为 200(邀请并预期用户,继续)。
在 IIS Express 中本地运行时,一切都很笨拙,处理程序会生成正确的响应有效负载和状态代码。但是,一旦部署到 Azure 应用服务中,处理程序的错误响应就会不断被重写或重定向。401 被扔给我们的 B2C 提供商(即使所有身份验证/授权逻辑都是从应用程序代码启动的,服务器配置为匿名访问,而我们的 B2C 提供商不知道),如果用户已经登录,这将创建一个无限重定向循环。400 和 500 会收到非常基本的“错误请求”或“内部服务器错误”的文本响应,而只有 200 个“OK”包含预期的 JSON 有效负载。
我们尝试过:
- 在指定 ASHX 的位置部分中使用标记 - 行为无变化
<customErrors mode="Off" />
- 在站点的主 system.web 部分中使用标记 - 行为没有变化
<customErrors mode="Off" />
- 使用 httpErrors 部分(在位置和全局中)指定行为 - 行为无变化
existingResponse="PassThrough"
- 使用 httpErrors 部分(在位置和全局中)显式清除任何错误重定向 - 行为没有变化
- 硬编码 200 响应代码,但在有效负载中指定实际状态代码(这是预期的) - 不起作用,B2C 比有效负载中的状态代码更受 B2C 关注,如果为 200,则假定验证通过。
在这一点上,我们被难住了;此 Azure 应用服务部署中的某些内容的配置与我们的其他工作站点不同,我们看不到或想不出它可能在哪里。无论指定的 HTTP 代码如何,我们都必须让此处理程序生成所需的 JSON 响应。
答: 暂无答案
评论