ASP.NET Core(.NET 6)でCookieSecurePolicyを設定する方法を解説します。
CookieSecurePolicyについて
CookieSecurePolicy は、Cookieをセキュアにするためのポリシーを設定するために使用されます。
セキュアなCookieは、HTTPSを使用して通信する場合にのみ送信され、HTTP通信の場合は送信されません。これにより、中間者攻撃や盗聴から保護されるため、セキュリティの工場に役立ちます。
基本的なCookieの名前であるName属性、Cookieの値であるValue属性など、様々な要素があります。
その中でも、Secureという属性によって、付与することでCookieはHTTPS通信でなければブラウザ、サーバ間で送信されなくなります。
CookieSecurePolicyのオプション
CookieSecurePolicy には3つのオプションがあります。以下がその設定の詳細です。
オプション | 詳細 |
---|---|
Always | 常にセキュアなクッキーを使用します。HTTPS通信の場合のみ送信されます。 |
SameAsRequest | 要求がHTTPSである場合にのみ、セキュアなクッキーを使用します。 |
None | 常に非セキュアなクッキーを使用します。HTTPおよびHTTPS通信の両方で送信されます。 |
セキュリティの観点から、Alwaysを使用することが推奨されます。
ただし、HTTPSが使用できない場合や開発環境でテストを実行する場合などは、Noneを使用することができます。
もし、クロスサイトでCookieを送信する場合、Cookie属性のSameSiteとSecureの設定が必要でCookieはHTTPS通信でなければブラウザ、サーバ間で送信されなくなります。
その場合は、CookieSecurePolicyのオプションはAlwaysに設定する必要があります。
Cookie属性のSameSite設定に関してはこちらを参照してください。
CookieSecurePolicyの実装方法
以下がCookieのCookieSecurePolicyを実装する方法です。
Program.csのCookieによる認証スキームを追加した箇所のオプションとしてCookieSecurePolicyの設定を追加する必要があります。
Cookieの認証スキームやそれを使ったログイン認証機能の実装方法についてはこちらを参照してください。
// Cookie による認証スキーム
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
// SameSiteMode:None の場合
options.Cookie.SameSite = SameSiteMode.None;
// CookieSecurePolicy:Always の場合
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
});
var app = builder.Build();