ASP.NET Core(.NET 6)でCookieのSameSite属性を取得する方法を解説します。
SameSite属性について
Cookieには発行する際にいくつかの属性を付与することができます。
基本的なCookieの名前であるName属性、Cookieの値であるValue属性など、様々な要素があります。
その中でも、SameSiteという属性によって、ブラウザやサーバ間のCookie送信をクロスサイトでも行うかの設定をすることができます。
SameSite属性の各設定値
以下はSameSite属性に設定できる値とその効果、セキュリティの強度になります。
Cookieのやり取りを行う対象によってどのような値を設定すれば良いかが変わってきます。
例えば、フロント側とサーバ側でクロスサイトでCookieのやりとりを行う場合は、SameSiteの属性はNoneを設定する必要があります。
ただし、SameSite属性にNoneを設定する場合は、CookieのSecure属性をtrueにする設定が必須となります。これでCookieはHTTPS通信でなければブラウザ、サーバ間で送信されなくなります。
また、もし上記の通りにSecure属性をtrueに設定した場合は、それとは別でCookieSecurePolicyオプションを実装する必要があります。
CookieSecurePolicyの設定に関してはこちらを参照してください。
名前 | 効果 | セキュリティ強度 |
---|---|---|
Strict | 同一サイトのみCookie送信可 | 強 |
Lax | クロスサイトの場合 HTTPメソッドがGET等特定の条件下のみ Cookie送信可 | 中 |
None | クロスサイト、同一サイト関係なく Cookie送信可 | 弱 |
SameSite属性の実装方法
以下がCookieのSameSite属性を実装する方法です。
Program.csのCookieによる認証スキームを追加した箇所のオプションとしてSameSite属性の設定を追加する必要があります。
Cookieの認証スキームやそれを使ったログイン認証機能の実装方法についてはこちらを参照してください。
// Cookie による認証スキーム
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
// SameSiteMode: None or Lax or Strict で設定する
options.Cookie.SameSite = SameSiteMode.None;
});
var app = builder.Build();