嵌入iframe的ASP.NET应用登录报400错误,CORS配置求助
问题背景
- 运行环境:IIS 10服务器托管.NET 7.0版本的ASP.NET Razor Pages应用,应用本身运行无异常
- 业务需求:客户需将该应用嵌入其网站的iframe中,因此需要配置CORS
- 当前状态:
- 最初尝试通过应用中间件启用CORS未成功,转而使用IIS的CorsModule进行配置
- 测试网站的iframe已能正常加载应用(说明GET请求可正常工作),但提交登录表单时,POST请求返回400 Bad Request错误
- 已配置两个Content-Security-Policy自定义响应头,才实现应用在iframe中的正常显示
- 已查阅多篇官方文档及CORS配置指南,仍未定位问题根源
IIS CorsModule配置项(附相关截图)
- Config Editor root
- Config Editor test site overview
- Config Editor test site allowHeaders
- Config Editor test site allowMethods
补充细节
针对@Heiko Theißen的回复:
抱歉,回复内容过长无法作为评论,故在此回复:
据我所知,iframe结合CORS存在额外限制,尤其是涉及登录功能/凭证的场景。目前已无明显的CORS相关错误提示(之前有,但现已消失),但应用本身登录正常,因此猜测问题与带凭证的CORS配置有关。
请求详情
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: de,en-US;q=0.7,en;q=0.3
Connection: keep-alive
Content-Length: 244
Content-Type: application/x-www-form-urlencoded
DNT: 1
Host: ***.de
Origin: ***.de (<-- 与Host一致)
Referer: ***.de (<-- 与Host一致)
Sec-Fetch-Dest: iframe
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
TE: trailers
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0
服务器响应详情
content-security-policy: frame-ancestors 'self' .de ..de .de ..de;
date: Fri, 17 Mar 2023 08:05:47 GMT
server: Microsoft-IIS/10.0
strict-transport-security: max-age=2592000
vary: Origin
x-content-security-policy: frame-ancestors 'self' .de ..de .de ..de;
X-Firefox-Spdy: h2
Firefox错误提示
Status: 400 Bad Request
Version: HTTP/2
传输: 1.32 kB (大小 0 B)
Referrer Policy: strict-origin-when-cross-origin
推测方向
请求payload应为登录数据,但暂无法验证。登录成功后需重定向至应用其他资源,过程涉及ASP.NET Cookie、AntiForgery-Cookie等,推测问题出在此类环节。
内容的提问来源于stack exchange,提问作者UDS

