Chrome现在在iframe中的本地存储中阻止Cognito令牌

35g0bw71  于 2023-10-14  发布在  Go
关注(0)|答案(1)|浏览(109)

这个问题大约在2023年8月中旬开始发生,而且只针对我们的一些用户。我有一个使用Cognito认证的应用程序。在浏览器中打开时,整个登录过程完全正常。在iframe中嵌入该站点时,Cognito auth令牌丢失。我可以在一个单独的标签中并排打开iframe和站点,标签中有Cognito令牌,iframe没有(通过检查localstorage找到)。我在Chrome更新说明中找不到任何会影响此功能的内容。
我们已尝试重新安装和更新Chrome。我们已尝试清除所有浏览器数据。我们已经通过更改日志来查找可能导致此问题的任何更新。我们已经降低了所有的安全设置。

dauxcl2d

dauxcl2d1#

您的问题可能与Chrome在上一个稳定版本中引入的localStorage分区有关,请查看此链接:https://developer.chrome.com/docs/privacy-sandbox/storage-partitioning/ siteA的localStorage不再与iframe嵌入siteA中的localStorage相同。如果您使用的是Chrome扩展,您可以尝试在清单中添加host_permissions。(https://developer.chrome.com/docs/extensions/mv3/storage-and-cookies/#storage-partitioning)

解决方案

我通过修改amplify配置并在配置中添加cookieStorage设置,成功地使我的Cognito身份验证在iframe中工作,如下所示:

Amplify.configure({
Auth: {
  userPoolId: config.aws.userPoolId,
  userPoolWebClientId: config.aws.userPoolWebClientId,
  identityPoolId: config.aws.identityPoolId,
  region: config.aws.region,
  cookieStorage: {
    domain: config.host,
    path: "/",
    expires: 365,
    sameSite: "none",
    secure: true,
    partitioned: false
  },
  oauth: {
    domain: config.aws.oauth.domain,
    scopes: [
      ...
    ],
    redirectSignIn: config.aws.oauth.redirectSignIn,
    redirectSignOut: config.aws.oauth.redirectSignOut,
    responseType: "code" // or 'token', note that REFRESH token will only be generated when the responseType is code
  }
},
Storage: {
  bucket: config.aws.bucket,
  region: config.aws.region,
  identityPoolId: config.aws.identityPoolId
}

});
关于partitioned: false的部分告诉amplify不要使用Chrome最新稳定版中添加的分区机制,默认情况下会激活。(partitioning in localStorage

相关问题