Chrome 브라우저에서 SameSite 쿠키 변경 내용 처리

SameSite란?

SameSite는 웹 애플리케이션에서 CSRF(교차 사이트 요청 위조) 공격을 방지하기 위해 HTTP 쿠키에서 설정할 수 있는 속성입니다.

  • SameSiteLax로 설정된 경우 쿠키는 동일한 사이트 내의 요청 및 다른 사이트의 GET 요청으로 전송됩니다. 도메인 간 GET 요청으로는 전송되지 않습니다.
  • Strict 값은 쿠키가 동일한 사이트 내의 요청으로만 전송되도록 합니다.

기본적으로 SameSite 값은 브라우저에서 설정되지 않습니다. 이때문에 요청으로 전송되는 쿠키에 대한 제한이 없습니다. 애플리케이션은 요구 사항에 따라 Lax 또는 Strict를 설정하여 CSRF 보호를 옵트인해야 합니다.

SameSite 변경 내용 및 인증에 미치는 영향

최신 SameSite 표준 업데이트는 값이 Lax로 설정되지 않은 경우 SameSite의 기본 동작을 만들어 앱 보호를 제안합니다. 이러한 완화는 다른 사이트에서 수행한 GET을 제외한 HTTP 요청에서 쿠키가 제한됨을 의미합니다. 또한 전송되는 쿠키에 대한 제한을 제거하기 위해 None 값이 도입되었습니다. 이러한 업데이트는 곧 Chrome 브라우저의 향후 버전에서 릴리스될 예정입니다.

웹앱이 응답 모드 "form_post"를 사용하여 Microsoft ID 플랫폼으로 인증하는 경우 로그인 서버는 HTTP POST를 사용하여 애플리케이션에 응답하여 토큰 또는 인증 코드를 보냅니다. 이 요청은 도메인 간 요청(예: login.microsoftonline.com에서 https://contoso.com/auth와 같은 도메인으로의 요청)이므로 앱에서 설정한 쿠키는 이제 Chrome의 새 규칙을 따릅니다. 사이트 간 시나리오에서 사용해야 하는 쿠키는 로그인 요청에서도 전송되는 상태nonce 값을 보유하는 쿠키입니다. 세션을 유지하기 위해 Microsoft Entra ID에서 삭제한 다른 쿠키가 있습니다.

웹앱을 업데이트하지 않으면 이 새로운 동작으로 인해 인증이 실패합니다.

완화 및 샘플

인증 오류를 해결하기 위해 Microsoft ID 플랫폼을 사용하여 인증하는 웹앱은 Chrome 브라우저에서 실행 될 때 도메인 간 시나리오에서 사용되는 쿠키에 대해 SameSite 속성을 None으로 설정할 수 있습니다. 다른 브라우저(전체 목록은 여기 참조)는 SameSite의 이전 동작을 따르고 SameSite=None가 설정된 경우 쿠키를 포함하지 않습니다. 이때문에 여러 브라우저에서 인증을 지원하기 위해 웹앱은 Chrome에서만 SameSite 값을 None으로 설정하고 다른 브라우저에서는 이 값을 비워 둡니다.

이 방식은 다음 샘플 코드에서 설명됩니다.

다음 표에서는 ASP.NET 및 ASP.NET Core 샘플의 SameSite 변경 내용을 해결하는 끌어오기 요청을 보여 줍니다.

예제 끌어오기 요청
ASP.NET Core 웹앱 증분 자습서 동일한 사이트 쿠키 수정 #261
ASP.NET MVC 웹앱 샘플: 동일한 사이트 쿠키 수정 #35
active-directory-dotnet-admin-restricted-scopes-v2 동일한 사이트 쿠키 수정 #28

ASP.NET 및 ASP.NET Core에서 SameSite 쿠키를 처리하는 방법에 대한 자세한 내용은 다음을 참조하세요.

다음 단계

SameSite 및 웹앱 시나리오에 대해 자세히 알아보세요.