Safari에서 Storage Access API를 사용하여 iframe에서 쿠키를 설정할 수 없습니다


9

내 페이지에 iframe이 있습니다. Safari가 타사 쿠키를 차단함에 따라 '개발자 지침'에 제시된대로 Storage Access API를 사용하려고합니다. https://webkit.org/blog/10218/full-third-party-cookie-blocking-and-more / . 설명서 에서 다음 코드를 복사했습니다 .

<script type="text/javascript">
  window.addEventListener('load', () => {
    document.getElementById('test-button').addEventListener('click', () => {
      document.hasStorageAccess().then(hasAccess => {
        console.log('hasAccess: ' + hasAccess);
        if (!hasAccess) {
          return document.requestStorageAccess();
        }
      }).then(_ => {
        console.log('Now we have first-party storage access!');
        document.cookie = "foo=bar";
        console.log(`document.cookie: ${document.cookie}`);
      }).catch(_ => {
        console.log('error');
      });
    });
  });
</script>

<button id="test-button">Test</button>

브라우저 콘솔 출력 :

[Log] hasAccess: true
[Log] Now we have first-party storage access!
[Log] document.cookie: 

보시다시피, 보조금은 성공한 것으로 보이지만 여전히 쿠키를 설정할 수는 없습니다. 누구든지 무엇이 잘못되었는지 알고 있습니까?

사파리 버전 13.0.1

편집 : Safari 13.1의 콘솔 출력 :

[Log] hasAccess: false
[Log] error

참고 : 묶는 페이지는 이 페이지를 가리키는 간단한 iframe태그입니다 src.


1
나는 같은 문제가 있습니다. 스토리지 액세스는 기존 쿠키에 대한 액세스를 제공하는 것으로 보이지만 새 쿠키는 저장하지 않습니다. 이는 "document.cookie"및 "Set-Cookie"헤더에 반환 된 새 쿠키 사용에 적용됩니다. 설명서에는 작동해야한다고 말하지만 작동하지 않습니다.
Matt Cosentino

Safari 13.1에서는 요청이 거부되었지만 이유를 이해할 수 없었습니다.
lunr

1
예, 정말 실망 스럽습니다. BTW Safari 13.1은 동일하게 작동하기 시작했습니다. 액세스 권한은 있지만 쿠키 설정에 실패했습니다.
lunr

으로 이 문서를 지정 액세스 권한을 부여 몇 가지 규칙이 있습니다. 그리고,에 console.log('Now we have first-party storage access!');들어 와서 then는 안 requestStorageAccess()됩니까?
Supun Kavinda

@SupunKavinda 처음 3 가지 규칙은 여기에 적용되지 않습니다. 나는 규칙 5를 완전히 이해하지 못한다. 아마도 도메인을 블랙리스트에 올린 다른 메커니즘을 언급하고있을 것이다. 나는 이것도 적용되지 않는다고 생각하지만 관련이 있는지 몇 가지를 시도 할 것입니다.
lunr

답변:


3

TL; DR

자사 컨텍스트에서 쿠키가 도메인에 이미 설정되어 있는지 확인하십시오.


해당 코드 샘플에서주의해야 할 사항이 몇 가지 있습니다. 다음은 Safari 13.1에서 테스트되었습니다.

사용자 프롬프트 조건 및 후속 액세스 권한 부여 :

  1. document.requestStorageAccess사용자 조치의 결과로 호출되어야합니다. 온 문서화에도 불구하고 MDN 워드 프로세서 , document.hasStorageAccess사용자 동작을 전파하지 않는 것 같습니다.
  2. 사용자는 이미 자사 컨텍스트에서 써드 파티와 상호 작용 했어야합니다. 문서를 클릭하면됩니다.

쿠키를 작성할 수있는 조건 :

쿠키는 자사 컨텍스트에서 도메인에 이미 설정되어 있어야합니다. 이 쿠키는 서버에서 응답 헤더로 설정하거나 JS가 document.cookie를 사용하여 설정할 수 있습니다. 약간의 추가 테스트를 수행하면 후속 쿠키를 타사 컨텍스트에서 설정하기 위해이 쿠키를 도메인 플래그와 함께 설정해서는 안됩니다. 즉, 기존 쿠키도 동일한 정확한 하위 도메인에 설정되어야합니다.


쿠키는 이러한 조건을 고려하여 작동합니다. 하지만 매번 액세스 권한을 요청해야하므로 현재는 사용할 수 없습니다. 아마도 우리는 여전히 다른 잘못된 일을하고 있었을 것입니다. 어쨌든 우리는 이것을 다르게 결정하기로 결정했습니다. 감사.
lunr

@lunr 결과를 공유 할 수 있습니까?
Sergey Korzhov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.