Google chrome 版本 84.0.4147.125(官方构建)(64 位)在重定向第三方回调函数时破坏应用程序会话
Google chrome Version 84.0.4147.125 (Official Build) (64-bit) destroying application session when redirecting on callback function from third party
// 在使用第三方网关托管表单之前创建会话
public function ezi_test() {
if (isset($_SESSION['form_data'])) {
unset($_SESSION['form_data']);
}
$this->common->maintain_log(array('collection_type'=>3,'org_id'=>'','log_path'=>'gateway_log/ezidebit/hosted_payment_formdata_creation_bef','log_data'=>json_encode($_REQUEST)));
parse_str($_REQUEST['data1'], $_REQUEST);
$_SESSION['paynow']['tnc']['email_id'] = isset($_REQUEST['email_id']) ? $_REQUEST['email_id'] : '';
$this->common->maintain_log(array('collection_type'=>3,'org_id'=>'','log_path'=>'gateway_log/ezidebit/hosted_payment_formdata_creation','log_data'=>json_encode($_REQUEST)));
$_SESSION['form_data'] = $_REQUEST
}
// 在第三方回调中检索会话
public 函数 ezi_hosted_payment() {
if (isset($_SESSION['ezi_hosted'])) {
unset($_SESSION['ezi_hosted']);
}
if (isset($_SESSION['form_data'])) {
$form_data = $_SESSION['form_data'];
unset($_SESSION['form_data']);
}
$this->common->maintain_log(array('collection_type'=>3,'org_id'=>'','log_path'=>'gateway_log/ezidebit/hosted_payment_log','log_data'=>json_encode($_REQUEST)));
$this->common->maintain_log(array('collection_type'=>3,'org_id'=>'','log_path'=>'gateway_log/ezidebit/hosted_payment_formdata','log_data'=>json_encode($form_data)));
$final = array_merge($_REQUEST, $form_data);
$_SESSION['pg_response'] = $_REQUEST;
$this->ezi_gateway_paynow_sub($final);
}
ASP.NET Core 3.1 和 HTTP(非 HTTPS)中的开放 ID 身份验证存在同样的问题。
可以重现:使用更新版本 84.0.4147.125(Offizieller Build)(64 位),始终重定向到登录页面。在其他浏览器上(例如 edge chromium 版本 84.0.522.58(Offizielles Build)(64 位))工作正常。
我读了一些关于它的文章(德语)
https://www.heise.de/news/Chrome-84-Google-verlangt-SameSite-Attribut-und-HTTPS-4844124.html
[更新]
找到了一个临时解决方案:chrome://flags/
设置:SameSite 默认 cookie
将未指定 SameSite 属性的 cookie 视为 SameSite=Lax。站点必须指定 SameSite=None 才能启用 third-party 用法。 – Mac, Windows, Linux, Chrome OS, Android
设置为禁用。
更好的解决方案是在 cookie 中设置 samesite 属性并启用 https...
猜猜是什么原因
我找到了一些适用于 .net core 3.2 的解决方案:
为
设置
services.AddAuthentication
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
options.Cookie.SameSite = SameSiteMode.None;
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
})
正在设置 idp
options.NonceCookie.SecurePolicy = CookieSecurePolicy.Always;
options.CorrelationCookie.SecurePolicy = CookieSecurePolicy.Always;
// 在使用第三方网关托管表单之前创建会话
public function ezi_test() {
if (isset($_SESSION['form_data'])) {
unset($_SESSION['form_data']);
}
$this->common->maintain_log(array('collection_type'=>3,'org_id'=>'','log_path'=>'gateway_log/ezidebit/hosted_payment_formdata_creation_bef','log_data'=>json_encode($_REQUEST)));
parse_str($_REQUEST['data1'], $_REQUEST);
$_SESSION['paynow']['tnc']['email_id'] = isset($_REQUEST['email_id']) ? $_REQUEST['email_id'] : '';
$this->common->maintain_log(array('collection_type'=>3,'org_id'=>'','log_path'=>'gateway_log/ezidebit/hosted_payment_formdata_creation','log_data'=>json_encode($_REQUEST)));
$_SESSION['form_data'] = $_REQUEST
}
// 在第三方回调中检索会话 public 函数 ezi_hosted_payment() {
if (isset($_SESSION['ezi_hosted'])) {
unset($_SESSION['ezi_hosted']);
}
if (isset($_SESSION['form_data'])) {
$form_data = $_SESSION['form_data'];
unset($_SESSION['form_data']);
}
$this->common->maintain_log(array('collection_type'=>3,'org_id'=>'','log_path'=>'gateway_log/ezidebit/hosted_payment_log','log_data'=>json_encode($_REQUEST)));
$this->common->maintain_log(array('collection_type'=>3,'org_id'=>'','log_path'=>'gateway_log/ezidebit/hosted_payment_formdata','log_data'=>json_encode($form_data)));
$final = array_merge($_REQUEST, $form_data);
$_SESSION['pg_response'] = $_REQUEST;
$this->ezi_gateway_paynow_sub($final);
}
ASP.NET Core 3.1 和 HTTP(非 HTTPS)中的开放 ID 身份验证存在同样的问题。
可以重现:使用更新版本 84.0.4147.125(Offizieller Build)(64 位),始终重定向到登录页面。在其他浏览器上(例如 edge chromium 版本 84.0.522.58(Offizielles Build)(64 位))工作正常。
我读了一些关于它的文章(德语) https://www.heise.de/news/Chrome-84-Google-verlangt-SameSite-Attribut-und-HTTPS-4844124.html
[更新] 找到了一个临时解决方案:chrome://flags/ 设置:SameSite 默认 cookie 将未指定 SameSite 属性的 cookie 视为 SameSite=Lax。站点必须指定 SameSite=None 才能启用 third-party 用法。 – Mac, Windows, Linux, Chrome OS, Android
设置为禁用。
更好的解决方案是在 cookie 中设置 samesite 属性并启用 https...
猜猜是什么原因
我找到了一些适用于 .net core 3.2 的解决方案: 为
设置services.AddAuthentication
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
options.Cookie.SameSite = SameSiteMode.None;
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
})
正在设置 idp
options.NonceCookie.SecurePolicy = CookieSecurePolicy.Always;
options.CorrelationCookie.SecurePolicy = CookieSecurePolicy.Always;