Trabalhar com cookies SameSite no ASP.NETWork with SameSite cookies in ASP.NET

Por Rick AndersonBy Rick Anderson

SameSite é um padrão de rascunho de IETF projetado para fornecer alguma proteção contra ataques CSRF (solicitação entre sites forjada).SameSite is an IETF draft standard designed to provide some protection against cross-site request forgery (CSRF) attacks. Originalmente rascunho em 2016, o rascunho padrão foi atualizado em 2019.Originally drafted in 2016, the draft standard was updated in 2019. O padrão atualizado não é compatível com versões anteriores com o padrão anterior, com as diferenças mais perceptíveis a seguir:The updated standard is not backward compatible with the previous standard, with the following being the most noticeable differences:

  • Cookies sem cabeçalho SameSite são tratados como SameSite=Lax por padrão.Cookies without SameSite header are treated as SameSite=Lax by default.
  • SameSite=None deve ser usado para permitir o uso de cookies entre sites.SameSite=None must be used to allow cross-site cookie use.
  • Os cookies que afirmam SameSite=None também devem ser marcados como Secure.Cookies that assert SameSite=None must also be marked as Secure.
  • Os aplicativos que usam <iframe> podem ter problemas com sameSite=Lax ou sameSite=Strict cookies porque <iframe> é tratado como cenários entre sites.Applications that use <iframe> may experience issues with sameSite=Lax or sameSite=Strict cookies because <iframe> is treated as cross-site scenarios.
  • O valor SameSite=None não é permitido pelo padrão 2016 e faz com que algumas implementações tratem cookies como SameSite=Strict.The value SameSite=None is not allowed by the 2016 standard and causes some implementations to treat such cookies as SameSite=Strict. Consulte suporte a navegadores mais antigos neste documento.See Supporting older browsers in this document.

A configuração SameSite=Lax funciona para a maioria dos cookies de aplicativo.The SameSite=Lax setting works for most application cookies. Algumas formas de autenticação, como o OpenID Connect (OIDC) e o WS-Federation, assumem o padrão de redirecionamentos baseados em post.Some forms of authentication like OpenID Connect (OIDC) and WS-Federation default to POST based redirects. Os redirecionamentos baseados em POST disparam as proteções do navegador SameSite, portanto, o SameSite está desabilitado para esses componentes.The POST based redirects trigger the SameSite browser protections, so SameSite is disabled for these components. A maioria dos logons OAuth não são afetados devido a diferenças na forma como os fluxos de solicitação.Most OAuth logins are not affected due to differences in how the request flows.

Cada componente ASP.NET que emite cookies precisa decidir se SameSite é apropriado.Each ASP.NET component that emits cookies needs to decide if SameSite is appropriate.

Consulte problemas conhecidos para problemas com aplicativos após a instalação das atualizações do 2019 .net SameSite.See Known Issues for problems with applications after installing the 2019 .Net SameSite updates.

Usando SameSite no ASP.NET 4.7.2 e 4,8Using SameSite in ASP.NET 4.7.2 and 4.8

O .NET 4.7.2 e 4,8 suporta o padrão de rascunho 2019 para SameSite desde o lançamento das atualizações em dezembro de 2019..Net 4.7.2 and 4.8 supports the 2019 draft standard for SameSite since the release of updates in December 2019. Os desenvolvedores podem controlar o valor do cabeçalho SameSite usando a Propriedade HttpCookie. SameSitede forma programática.Developers are able to programmatically control the value of the SameSite header using the HttpCookie.SameSite property. Definir a propriedade SameSite como Strict, Laxou None resulta na gravação desses valores na rede com o cookie.Setting the SameSite property to Strict, Lax, or None results in those values being written on the network with the cookie. Defini-lo como igual a (SameSiteMode)(-1) indica que nenhum cabeçalho SameSite deve ser incluído na rede com o cookie.Setting it equal to (SameSiteMode)(-1) indicates that no SameSite header should be included on the network with the cookie. A Propriedade HttpCookie. Secure, ou ' RequireSSL ' nos arquivos de configuração, pode ser usada para marcar o cookie como Secure ou não.The HttpCookie.Secure Property, or 'requireSSL' in config files, can be used to mark the cookie as Secure or not.

Novas instâncias de HttpCookie serão padronizadas para SameSite=(SameSiteMode)(-1) e Secure=false.New HttpCookie instances will default to SameSite=(SameSiteMode)(-1) and Secure=false. Esses padrões podem ser substituídos na seção de configuração system.web/httpCookies, em que a cadeia de caracteres "Unspecified" é uma sintaxe amigável somente para configuração para (SameSiteMode)(-1):These defaults can be overridden in the system.web/httpCookies configuration section, where the string "Unspecified" is a friendly configuration-only syntax for (SameSiteMode)(-1):

<configuration>
 <system.web>
  <httpCookies sameSite="[Strict|Lax|None|Unspecified]" requireSSL="[true|false]" />
 <system.web>
<configuration>

O ASP.Net também emite quatro cookies específicos para estes recursos: autenticação anônima, autenticação de formulários, estado de sessão e gerenciamento de função.ASP.Net also issues four specific cookies of its own for these features: Anonymous Authentication, Forms Authentication, Session State, and Role Management. As instâncias desses cookies obtidas no tempo de execução podem ser manipuladas usando as propriedades SameSite e Secure assim como qualquer outra instância de HttpCookie.Instances of these cookies obtained in runtime can be manipulated using the SameSite and Secure properties just like any other HttpCookie instance. No entanto, devido ao surgimento colcha do padrão SameSite, as opções de configuração para esses quatro recursos cookies são inconsistentes.However, due to the patchwork emergence of the SameSite standard, configuration options for these four features cookies is inconsistent. As seções e os atributos de configuração relevantes, com padrões, são mostrados abaixo.The relevant configuration sections and attributes, with defaults, are shown below. Se não houver nenhum atributo relacionado SameSite ou Secure para um recurso, o recurso será reproduzido nos padrões configurados na seção system.web/httpCookies discutida acima.If there is no SameSite or Secure related attribute for a feature, then the feature will fall back on the defaults configured in the system.web/httpCookies section discussed above.

<configuration>
 <system.web>
  <anonymousIdentification cookieRequireSSL="false" /> <!-- No config attribute for SameSite -->
  <authentication>
   <forms cookieSameSite="Lax" requireSSL="false" />
  </authentication>
  <sessionState cookieSameSite="Lax" /> <!-- No config attribute for Secure -->
  <roleManager cookieRequireSSL="false" /> <!-- No config attribute for SameSite -->
 <system.web>
<configuration>

Observação: "não especificado" está disponível somente para system.web/httpCookies@sameSite no momento.Note: 'Unspecified' is only available to system.web/httpCookies@sameSite at the moment. Esperamos adicionar sintaxe semelhante aos atributos cookieSameSite mostrados anteriormente em atualizações futuras.We hope to add similar syntax to the previously shown cookieSameSite attributes in future updates. A configuração (SameSiteMode)(-1) no código ainda funciona em instâncias desses cookies. *Setting (SameSiteMode)(-1) in code still works on instances of these cookies.*

Se você estiver lendo isso em um idioma diferente do inglês, informe-nos sobre esse problema de discussão do GitHub se quiser ver os comentários de código em seu idioma nativo.If you are reading this in a language other than English, let us know in this GitHub discussion issue if you’d like to see the code comments in your native language.

Redirecionar aplicativos .NETRetarget .NET apps

Para direcionar o .NET 4.7.2 ou posterior:To target .NET 4.7.2 or later:

  • Verifique se o Web. config contém o seguinte:Ensure web.config contains the following:

    <system.web>
      <compilation targetFramework="4.7.2"/>
      <httpRuntime targetFramework="4.7.2"/>
    </system.web>
    
    
  • Verify the project file contains the correct TargetFrameworkVersion:

    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
    

    O Guia de migração do .net tem mais detalhes.The .NET Migration Guide has more details.

  • Verifique se os pacotes NuGet no projeto são direcionados para a versão correta da estrutura.Verify NuGet packages in the project are targeted at the correct framework version. Você pode verificar a versão correta da estrutura examinando o arquivo Packages. config , por exemplo:You can verify the correct framework version by examining the packages.config file, for example:

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="Microsoft.AspNet.Mvc" version="5.2.7" targetFramework="net472" />
      <package id="Microsoft.ApplicationInsights" version="2.4.0" targetFramework="net451" />
    </packages>
    

    No arquivo Packages. config anterior, o pacote Microsoft.ApplicationInsights:In the preceding packages.config file, the Microsoft.ApplicationInsights package:

    • É destinado ao .NET 4.5.1.Is targeted against .NET 4.5.1.
    • Deve ter seu atributo targetFramework atualizado para net472 se um pacote atualizado direcionado para o destino da estrutura existir.Should have its targetFramework attribute updated to net472 if an updated package targeting your framework target exists.

Versões do .NET anteriores a 4.7.2.NET versions earlier than 4.7.2

A Microsoft não dá suporte a versões do .NET inferiores a 4.7.2 para gravar o atributo de cookie de mesmo site.Microsoft does not support .NET versions lower that 4.7.2 for writing the same-site cookie attribute. Não encontramos uma maneira confiável de:We have not found a reliable way to:

  • Verifique se o atributo foi gravado corretamente com base na versão do navegador.Ensure the attribute is written correctly based on browser version.
  • Interceptar e ajustar os cookies de autenticação e sessão em versões mais antigas do Framework.Intercept and adjust authentication and session cookies on older framework versions.

Alterações de comportamento de patch de dezembroDecember patch behavior changes

A alteração de comportamento específica para .NET Framework é como a propriedade SameSite interpreta o valor de None:The specific behavior change for .NET Framework is how the SameSite property interprets the None value:

  • Antes do patch, um valor de None significava:Before the patch a value of None meant:
    • Não emita o atributo de nenhuma vez.Do not emit the attribute at all.
  • Após o patch:After the patch:
    • Um valor de Nonesignifica "emitir o atributo com um valor de None".A value of Noneit means "Emit the attribute with a value of None".
    • Um valor SameSite de (SameSiteMode)(-1) faz com que o atributo não seja emitido.A SameSite value of (SameSiteMode)(-1) causes the attribute not to be emitted.

O valor padrão de SameSite para autenticação de formulários e cookies de estado de sessão foi alterado de None para Lax.The default SameSite value for forms authentication and session state cookies was changed from None to Lax.

Resumo do impacto de alterações nos navegadoresSummary of change impact on browsers

Se você instalar o patch e emitir um cookie com SameSite.None, uma das duas coisas ocorrerá:If you install the patch and issue a cookie with SameSite.None, one of two things will happen:

  • O Chrome V80 tratará esse cookie de acordo com a nova implementação e não imporá as mesmas restrições de site no cookie.Chrome v80 will treat this cookie according to the new implementation, and not enforce same site restrictions on the cookie.
  • Qualquer navegador que não tenha sido atualizado para dar suporte à nova implementação seguirá a implementação antiga.Any browser that has not been updated to support the new implementation will follow the old implementation. A implementação antiga diz:The old implementation says:
    • Se você vir um valor que não entende, ignore-o e alterne para as mesmas restrições de site estritas.If you see a value you don't understand, ignore it and switch to strict same site restrictions.

Então, o aplicativo é interrompido no Chrome ou você quebra vários outros lugares.So either the app breaks in Chrome, or you break in numerous other places.

Histórico e alteraçõesHistory and changes

O suporte a SameSite foi implementado pela primeira vez no .NET 4.7.2 usando o padrão de rascunho 2016.SameSite support was first implemented in .NET 4.7.2 using the 2016 draft standard.

As atualizações de 19 de novembro de 2019 para o Windows atualizaram o .NET 4.7.2 + do padrão 2016 para o padrão 2019.The November 19, 2019 updates for Windows updated .NET 4.7.2+ from the 2016 standard to the 2019 standard. Atualizações adicionais estão em breve para outras versões do Windows.Additional updates are forthcoming for other versions of Windows. Para obter mais informações, consulte Artigos da base de conhecimento que dão suporte a SameSite no .NET Framework.For more information, see Artigos da base de conhecimento que dão suporte a SameSite no .NET Framework.

O rascunho 2019 da especificação de SameSite:The 2019 draft of the SameSite specification:

  • Não é compatível com versões anteriores com o rascunho 2016.Is not backwards compatible with the 2016 draft. Para obter mais informações, consulte dando suporte a navegadores mais antigos neste documento.For more information, see Supporting older browsers in this document.
  • Especifica que os cookies são tratados como SameSite=Lax por padrão.Specifies cookies are treated as SameSite=Lax by default.
  • Especifica cookies que declaram explicitamente SameSite=None para habilitar a entrega entre sites também devem ser marcados como Secure.Specifies cookies that explicitly assert SameSite=None in order to enable cross-site delivery should also be marked as Secure.
  • O é suportado por patches emitidos conforme descrito em KB listados acima.Is supported by patches issued as described in the KB's listed above.
  • Está agendado para ser habilitado pelo Chrome por padrão em fevereiro de 2020.Is scheduled to be enabled by Chrome by default in Feb 2020. Os navegadores começaram a passar para esse padrão em 2019.Browsers started moving to this standard in 2019.

Problemas conhecidosKnown Issues

Como as especificações de rascunho 2016 e 2019 não são compatíveis, a atualização de novembro de 2019 do .NET Framework introduz algumas alterações que podem estar sendo interrompidas.Because the 2016 and 2019 draft specifications are not compatible, the November 2019 .Net Framework update introduces some changes that may be breaking.

  • Os cookies de estado de sessão e de autenticação de formulários agora são gravados na rede como Lax em vez de não especificados.Session State and Forms Authentication cookies are now written to the network as Lax instead of unspecified.
    • Embora a maioria dos aplicativos trabalhe com SameSite=Lax cookies, os aplicativos que fazem o POST entre sites ou aplicativos que usam iframe podem descobrir que seus Estados de sessão ou cookies de autorização de formulários não estão sendo usados conforme o esperado.While most apps work with SameSite=Lax cookies, apps that POST across sites or applications that make use of iframe may find that their session state or forms authorization cookies aren't being used as expected. Para corrigir isso, altere o valor cookieSameSite na seção de configuração apropriada, conforme discutido anteriormente.To remedy this, change the cookieSameSite value in the appropriate configuration section as discussed previously.
  • Os HttpCookies que definem explicitamente SameSite=None no código ou na configuração agora têm esse valor gravado com o cookie, enquanto ele foi omitido anteriormente.HttpCookies that explicitly set SameSite=None in code or configuration now have that value written with the cookie, whereas it was previously omitted. Isso pode causar problemas com navegadores mais antigos que dão suporte apenas ao padrão de rascunho 2016.This may cause issues with older browsers that only support the 2016 draft standard.
    • Ao direcionar os navegadores que dão suporte ao padrão de rascunho 2019 com cookies SameSite=None, lembre-se também de marcá-los Secure ou eles podem não ser reconhecidos.When targeting browsers supporting the 2019 draft standard with SameSite=None cookies, remember to also mark them Secure or they may not be recognized.
    • Para reverter para o comportamento 2016 de não gravar SameSite=None, use a configuração de aplicativo aspnet:SupressSameSiteNone=true.To revert to the 2016 behavior of not writing SameSite=None, use the app setting aspnet:SupressSameSiteNone=true. Observe que isso será aplicado a todos os HttpCookies no aplicativo.Note that this will apply to all HttpCookies in the app.

Consulte serviço de Azure app – tratamento de cookies SameSite e .NET Framework patch do 4.7.2 para obter informações sobre como Azure app serviço está configurando comportamentos de SameSite em aplicativos .NET 4.7.2.See Azure App Service—SameSite cookie handling and .NET Framework 4.7.2 patch for information about how Azure App Service is configuring SameSite behaviors in .Net 4.7.2 apps.

Suporte a navegadores mais antigosSupporting older browsers

O padrão de 2016 SameSite exigiu que valores desconhecidos devem ser tratados como valores SameSite=Strict.The 2016 SameSite standard mandated that unknown values must be treated as SameSite=Strict values. Os aplicativos acessados de navegadores mais antigos que dão suporte ao padrão de 2016 SameSite podem falhar quando obtêm uma propriedade SameSite com um valor de None.Apps accessed from older browsers which support the 2016 SameSite standard may break when they get a SameSite property with a value of None. Os aplicativos Web devem implementar a detecção do navegador se pretenderem oferecer suporte a navegadores mais antigos.Web apps must implement browser detection if they intend to support older browsers. O ASP.NET não implementa a detecção de navegador, pois os valores dos agentes de usuário são altamente voláteis e mudam com frequência.ASP.NET doesn't implement browser detection because User-Agents values are highly volatile and change frequently.

A abordagem da Microsoft para corrigir o problema é ajudá-lo a implementar componentes de detecção de navegador para remover o atributo sameSite=None de cookies se um navegador for conhecido por não oferecer suporte a ele.Microsoft's approach to fixing the problem is to help you implement browser detection components to strip the sameSite=None attribute from cookies if a browser is known to not support it. O Conselho do Google foi emitir cookies duplos, um com o novo atributo e um sem o atributo.Google's advice was to issue double cookies, one with the new attribute, and one without the attribute at all. No entanto, consideramos o aviso do Google limitado.However we consider Google's advice limited. Alguns navegadores, especialmente os navegadores móveis têm limites muito pequenos no número de cookies de um site ou um nome de domínio pode enviar.Some browsers, especially mobile browsers have very small limits on the number of cookies a site, or a domain name can send. O envio de vários cookies, especialmente cookies grandes, como cookies de autenticação, pode alcançar o limite do navegador móvel muito rapidamente, causando falhas de aplicativo difíceis de diagnosticar e corrigir.Sending multiple cookies, especially large cookies like authentication cookies can reach the mobile browser limit very quickly, causing app failures that are hard to diagnose and fix. Além de uma estrutura, há um grande ecossistema de código e componentes de terceiros que podem não ser atualizados para usar uma abordagem de cookie duplo.Furthermore as a framework there is a large ecosystem of third party code and components that may not be updated to use a double cookie approach.

O código de detecção do navegador usado nos projetos de exemplo neste repositório GitHub está contido em dois arquivosThe browser detection code used in the sample projects in this GitHub repository is contained in two files

Essas detecções são os agentes de navegador mais comuns que vimos que dão suporte ao padrão 2016 e para os quais o atributo precisa ser completamente removido.These detections are the most common browser agents we have seen that support the 2016 standard and for which the attribute needs to be completely removed. Isso não significa uma implementação completa:It isn't meant as a complete implementation:

  • Seu aplicativo pode ver os navegadores que nossos sites de teste não têm.Your app may see browsers that our test sites do not.
  • Você deve estar preparado para adicionar detecções conforme necessário para seu ambiente.You should be prepared to add detections as necessary for your environment.

A forma de conexão da detecção varia de acordo com a versão do .NET e a estrutura da Web que você está usando.How you wire up the detection varies according the version of .NET and the web framework that you are using. O código a seguir pode ser chamado no site de chamada do HttpCookie :The following code can be called at the HttpCookie call site:

private void CheckSameSite(HttpContext httpContext, HttpCookie cookie)
{
    if (cookie.SameSite == SameSiteMode.None)
    {
        var userAgent = httpContext.Request.UserAgent;
        if (BrowserDetection.DisallowsSameSiteNone(userAgent))
        {
            cookie.SameSite = (SameSiteMode)(-1);
        }
    }
}

Consulte os seguintes tópicos de cookies do ASP.NET 4.7.2 SameSite:See the following ASP.NET 4.7.2 SameSite cookie topics:

Garantindo que seu site Redirecione para HTTPSEnsuring your site redirects to HTTPS

Para ASP.NET 4. x, WebForms e MVC, o recurso de reescrita de URL do IIS pode ser usado para redirecionar todas as solicitações para https.For ASP.NET 4.x, WebForms and MVC, IIS's URL Rewrite feature can be used to redirect all requests to HTTPS. O XML a seguir mostra uma regra de exemplo:The following XML shows a sample rule:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Redirect to https" stopProcessing="true">
          <match url="(.*)"/>
          <conditions>
            <add input="{HTTPS}" pattern="Off"/>
            <add input="{REQUEST_METHOD}" pattern="^get$|^head$" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent"/>
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

Em instalações locais da regravação de URL do IIS , há um recurso opcional que pode precisar de instalação.In on-premises installations of IIS URL Rewrite is an optional feature that may need installing.

Testar aplicativos para problemas de SameSiteTest apps for SameSite problems

Você deve testar seu aplicativo com os navegadores aos quais dá suporte e percorrer os cenários que envolvem cookies.You must test your app with the browsers you support and go through your scenarios that involve cookies. Cenários de cookie normalmente envolvemCookie scenarios typically involve

  • Formulários de logonLogin forms
  • Mecanismos de logon externos, como Facebook, Azure AD, OAuth e OIDCExternal login mechanisms such as Facebook, Azure AD, OAuth and OIDC
  • Páginas que aceitam solicitações de outros sitesPages that accept requests from other sites
  • Páginas em seu aplicativo projetadas para serem inseridas em IFramesPages in your app designed to be embedded in iframes

Você deve verificar se os cookies são criados, persistidos e excluídos corretamente em seu aplicativo.You should check that cookies are created, persisted and deleted correctly in your app.

Aplicativos que interagem com sites remotos, como por meio de logon de terceiros, precisam:Apps that interact with remote sites such as through third-party login need to:

Teste os aplicativos Web usando uma versão do cliente que pode aceitar o novo comportamento de SameSite.Test web apps using a client version that can opt-in to the new SameSite behavior. O Chrome, o Firefox e o Chromium Edge têm novos sinalizadores de recurso de aceitação que podem ser usados para teste.Chrome, Firefox, and Chromium Edge all have new opt-in feature flags that can be used for testing. Depois que seu aplicativo aplicar os patches do SameSite, teste-o com versões mais antigas do cliente, especialmente o Safari.After your app applies the SameSite patches, test it with older client versions, especially Safari. Para obter mais informações, consulte dando suporte a navegadores mais antigos neste documento.For more information, see Supporting older browsers in this document.

Teste com o ChromeTest with Chrome

O Chrome 78 + fornece resultados enganosos porque tem uma mitigação temporária em vigor.Chrome 78+ gives misleading results because it has a temporary mitigation in place. A mitigação do Chrome 78 + temporária permite cookies com menos de dois minutos.The Chrome 78+ temporary mitigation allows cookies less than two minutes old. O Chrome 76 ou 77 com os sinalizadores de teste apropriados habilitados fornece resultados mais precisos.Chrome 76 or 77 with the appropriate test flags enabled provides more accurate results. Para testar o novo comportamento de SameSite, alterne chrome://flags/#same-site-by-default-cookies para habilitado.To test the new SameSite behavior toggle chrome://flags/#same-site-by-default-cookies to Enabled. Versões mais antigas do Chrome (75 e inferior) são relatadas para falha com a nova configuração de None.Older versions of Chrome (75 and below) are reported to fail with the new None setting. Consulte suporte a navegadores mais antigos neste documento.See Supporting older browsers in this document.

O Google não disponibiliza versões mais antigas do Chrome.Google does not make older chrome versions available. Siga as instruções em baixar o Chromium para testar versões anteriores do Chrome.Follow the instructions at Download Chromium to test older versions of Chrome. Não Baixe o Chrome de links fornecidos pela pesquisa de versões mais antigas do Chrome.Do not download Chrome from links provided by searching for older versions of chrome.

A partir do canário versão 80.0.3975.0, a mitigação temporária mais completa pode ser desabilitada para fins de teste usando o novo sinalizador --enable-features=SameSiteDefaultChecksMethodRigorously para permitir o teste de sites e serviços no estado final eventual do recurso em que a mitigação foi removida.Starting in Canary version 80.0.3975.0, the Lax+POST temporary mitigation can be disabled for testing purposes using the new flag --enable-features=SameSiteDefaultChecksMethodRigorously to allow testing of sites and services in the eventual end state of the feature where the mitigation has been removed. Para obter mais informações, consulte o Chromium Projects SameSite updatesFor more information, see The Chromium Projects SameSite Updates

Teste com o Chrome 80 +Test with Chrome 80+

Baixe uma versão do Chrome que dê suporte a seu novo atributo.Download a version of Chrome that supports their new attribute. No momento da gravação, a versão atual é o Chrome 80.At the time of writing, the current version is Chrome 80. O Chrome 80 precisa do sinalizador chrome://flags/#same-site-by-default-cookies habilitado para usar o novo comportamento.Chrome 80 needs the flag chrome://flags/#same-site-by-default-cookies enabled to use the new behavior. Você também deve habilitar (chrome://flags/#cookies-without-same-site-must-be-secure) para testar o comportamento futuro de cookies que não têm o atributo sameSite habilitado.You should also enable (chrome://flags/#cookies-without-same-site-must-be-secure) to test the upcoming behavior for cookies which have no sameSite attribute enabled. O Chrome 80 está no destino para fazer com que a opção trate cookies sem o atributo como SameSite=Lax, embora com um período de carência cronometrado para determinadas solicitações.Chrome 80 is on target to make the switch to treat cookies without the attribute as SameSite=Lax, albeit with a timed grace period for certain requests. Para desabilitar o período de carência cronometrado, o Chrome 80 pode ser iniciado com o seguinte argumento de linha de comando:To disable the timed grace period Chrome 80 can be launched with the following command line argument:

--enable-features=SameSiteDefaultChecksMethodRigorously

O Chrome 80 tem mensagens de aviso no console do navegador sobre atributos sameSite ausentes.Chrome 80 has warning messages in the browser console about missing sameSite attributes. Use F12 para abrir o console do navegador.Use F12 to open the browser console.

Teste com o SafariTest with Safari

O Safari 12 implementou estritamente o rascunho anterior e falha quando o novo valor de None está em um cookie.Safari 12 strictly implemented the prior draft and fails when the new None value is in a cookie. None é evitada por meio do código de detecção de navegador que dá suporte a navegadores mais antigos neste documento.None is avoided via the browser detection code Supporting older browsers in this document. Teste OS logons de estilo do sistema operacional baseado no Safari 12, Safari 13 e WebKit usando MSAL, ADAL ou qualquer biblioteca que você esteja usando.Test Safari 12, Safari 13, and WebKit based OS style logins using MSAL, ADAL or whatever library you are using. O problema depende da versão subjacente do sistema operacional.The problem is dependent on the underlying OS version. OSX Mojave (10,14) e iOS 12 são conhecidos por ter problemas de compatibilidade com o novo comportamento de SameSite.OSX Mojave (10.14) and iOS 12 are known to have compatibility problems with the new SameSite behavior. Atualizar o sistema operacional para OSX Catalina (10,15) ou iOS 13 corrige o problema.Upgrading the OS to OSX Catalina (10.15) or iOS 13 fixes the problem. No momento, o Safari não tem um sinalizador de aceitação para testar o novo comportamento de especificação.Safari does not currently have an opt-in flag for testing the new spec behavior.

Testar com o FirefoxTest with Firefox

O suporte do Firefox para o novo padrão pode ser testado na versão 68 +, optando na página de about:config com o sinalizador de recurso network.cookie.sameSite.laxByDefault.Firefox support for the new standard can be tested on version 68+ by opting in on the about:config page with the feature flag network.cookie.sameSite.laxByDefault. Não há relatórios de problemas de compatibilidade com versões mais antigas do Firefox.There haven't been reports of compatibility issues with older versions of Firefox.

Testar com o navegador de borda (Herdado)Test with Edge (Legacy) browser

O Edge dá suporte ao antigo SameSite padrão.Edge supports the old SameSite standard. A versão do Edge 44 + não tem nenhum problema de compatibilidade conhecido com o novo padrão.Edge version 44+ doesn't have any known compatibility problems with the new standard.

Testar com borda (Chromium)Test with Edge (Chromium)

Os sinalizadores SameSite são definidos na página edge://flags/#same-site-by-default-cookies.SameSite flags are set on the edge://flags/#same-site-by-default-cookies page. Nenhum problema de compatibilidade foi descoberto com o Edge Chromium.No compatibility issues were discovered with Edge Chromium.

Testar com oTest with Electron

As versões do at-SS são versões mais antigas do Chromium.Versions of Electron include older versions of Chromium. Por exemplo, a versão do at-SS usada pelas equipes é Chromium 66, que exibe o comportamento mais antigo.For example, the version of Electron used by Teams is Chromium 66, which exhibits the older behavior. Você deve executar seu próprio teste de compatibilidade com a versão do uso de digital que seu produto usa.You must perform your own compatibility testing with the version of Electron your product uses. Consulte suporte a navegadores mais antigos.See Supporting older browsers.

Revertendo patches do SameSiteReverting SameSite patches

Você pode reverter o comportamento de sameSite atualizado em aplicativos .NET Framework para o comportamento anterior em que o atributo sameSite não é emitido para um valor de Nonee reverter a autenticação e os cookies de sessão para não emitir o valor.You can revert the updated sameSite behavior in .NET Framework apps to its previous behavior where the sameSite attribute is not emitted for a value of None, and revert the authentication and session cookies to not emit the value. Isso deve ser exibido como uma correção extremamente temporária, pois as alterações do Chrome interromperão quaisquer solicitações post externas ou autenticação para usuários que usam navegadores que dão suporte às alterações no padrão.This should be viewed as an extremely temporary fix, as the Chrome changes will break any external POST requests or authentication for users using browsers which support the changes to the standard.

Revertendo o comportamento do .NET 4.7.2Reverting .NET 4.7.2 behavior

Atualize o Web. config para incluir as seguintes definições de configuração:Update web.config to include the following configuration settings:

<configuration> 
  <appSettings>
    <add key="aspnet:SuppressSameSiteNone" value="true" />
  </appSettings>
 
  <system.web> 
    <authentication> 
      <forms cookieSameSite="None" /> 
    </authentication> 
    <sessionState cookieSameSite="None" /> 
  </system.web> 
</configuration>

Recursos adicionaisAdditional resources