Chrome 80でのSameSiteの今後の変更に備えるために、.NET Framework APIを4.6.2
から4.7.2
にアップグレードしました。
SameSite=None
でCookieを設定するだけの簡単なテストエンドポイントを作成しました。
public class TestController : ApiController
{
public IHttpActionResult Get()
{
var cookie = new HttpCookie("foo", "bar")
{
HttpOnly = true,
Secure = true,
SameSite = SameSiteMode.None
};
HttpContext.Current.Response.SetCookie(cookie);
return Ok();
}
}
これはローカルで期待どおりに動作し、次のヘッダーが返されます。
set-cookie: foo=bar; path=/; secure; HttpOnly; SameSite=None
ただし、ランタイムスタックとして4.7で構成されたAzure Webアプリに発行する場合、これは機能しません。 Webアプリは、SameSiteなしでCookieヘッダーを返します。
Set-Cookie: foo=bar; path=/; secure; HttpOnly
Strict
またはLax
に設定すると、Azureでも期待どおりに機能します。
これはAzureの問題ですか?これを機能させるためにWebアプリで構成する必要があるものはありますか、または別の方法でCookieを設定する必要がありますか?
同じサイトのCookieの変更は、dot Net Framework 4.7.2以降で対処されています。
App Serviceでこれらの変更を確認する場合は、Kudu(SCM)エンドポイントに移動してください。環境変数の下で、App Service Platformのバージョンを確認できます。
App Serviceバージョンで利用可能な同じサイトCookieの更新:86.0.7.148(またはそれ以降)。
変更の詳細は https://Azure.Microsoft.com/en-in/updates/app-service-samesite-cookie-update/ にあります。
これらの変更により影響を受けた場合は、以下の構成変更を使用して一時的に自分のブロックを解除できます。
<configuration>
<system.web>
<sessionState cookieSameSite="None" />
</system.web>
</configuration>
Chromeブラウザバージョン80以降では、これらの構成でも機能せず、コードを修正する必要がある場合でもChromiumになります。
上記の変更により、古いブラウザは機能しなくなりますのでご注意ください。 2016のSameSite標準をサポートする古いブラウザからアクセスしたアプリは、値がNoneのSameSiteプロパティを取得すると、機能しなくなる可能性があります。
httpContext.Request.UserAgentを使用してユーザーエージェント(ブラウザ)を確認できます
上記の情報がお役に立てば幸いです:)