该问题的原因在于浏览器对于iframe的SameSite默认设置为“Strict”,而导致身份验证cookies无法在iframe中正常工作。
解决方法有两种:
将SameSite设置为“None”(非标准):需要将Response.Cookies.Append方法中的SameSite属性设置为SameSiteMode.None,并且必须配合Secure属性设置为true(建议只在HTTPS环境下使用),如下示例:
Response.Cookies.Append( cookieName, cookieValue, new CookieOptions { Expires = DateTimeOffset.UtcNow.AddMinutes(expiryMins), HttpOnly = true, SameSite = SameSiteMode.None, Secure = true, // 确保只在HTTPS环境下使用该cookie });
将SameSite设置为“Lax”(标准):需要将Response.Cookies.Append方法中的SameSite属性设置为SameSiteMode.Lax,如下示例:
Response.Cookies.Append( cookieName, cookieValue, new CookieOptions { Expires = DateTimeOffset.UtcNow.AddMinutes(expiryMins), HttpOnly = true, SameSite = SameSiteMode.Lax, });
建议选择第二种方法,因为这是标准做法,不需要设置非标准的SameSite值,并且其支持范围更广。