Skip to content

Commit fcab719

Browse files
committed
Include patch quirks
1 parent 149bcbd commit fcab719

File tree

7 files changed

+44
-6
lines changed

7 files changed

+44
-6
lines changed

src/Http/Headers/src/SetCookieHeaderValue.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ private static readonly HttpHeaderParser<SetCookieHeaderValue> MultipleValuePars
4444

4545
static SetCookieHeaderValue()
4646
{
47-
if (AppContext.TryGetSwitch("Microsoft.Net.Http.Headers.SetCookieHeaderValue.SuppressSameSiteNone", out var enabled))
47+
if (AppContext.TryGetSwitch("Microsoft.AspNetCore.SuppressSameSiteNone", out var enabled))
4848
{
4949
SuppressSameSiteNone = enabled;
5050
}

src/Http/Headers/test/SetCookieHeaderValueTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ public static TheoryData<IList<SetCookieHeaderValue>, string[]> ListOfSetCookieH
165165

166166
var header8 = new SetCookieHeaderValue("name8", "value8")
167167
{
168-
SameSite = (SameSiteMode)(-1) // Unspecified
168+
SameSite = SameSiteMode.Unspecified
169169
};
170170
var string8a = "name8=value8; samesite";
171171
var string8b = "name8=value8; samesite=invalid";

src/Http/Http.Abstractions/src/CookieBuilder.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,20 @@ namespace Microsoft.AspNetCore.Http
1111
/// </summary>
1212
public class CookieBuilder
1313
{
14+
// True (old): https://tools.ietf.org/html/draft-west-first-party-cookies-07#section-3.1
15+
// False (new): https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.1
16+
internal static bool SuppressSameSiteNone;
17+
1418
private string _name;
1519

20+
static CookieBuilder()
21+
{
22+
if (AppContext.TryGetSwitch("Microsoft.AspNetCore.SuppressSameSiteNone", out var enabled))
23+
{
24+
SuppressSameSiteNone = enabled;
25+
}
26+
}
27+
1628
/// <summary>
1729
/// The name of the cookie.
1830
/// </summary>
@@ -54,7 +66,7 @@ public virtual string Name
5466
/// <remarks>
5567
/// Determines the value that will set on <seealso cref="CookieOptions.SameSite"/>.
5668
/// </remarks>
57-
public virtual SameSiteMode SameSite { get; set; } = SameSiteMode.Unspecified;
69+
public virtual SameSiteMode SameSite { get; set; } = SuppressSameSiteNone ? SameSiteMode.None : SameSiteMode.Unspecified;
5870

5971
/// <summary>
6072
/// The policy that will be used to determine <seealso cref="CookieOptions.Secure"/>.

src/Http/Http.Features/src/CookieOptions.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,18 @@ namespace Microsoft.AspNetCore.Http
1010
/// </summary>
1111
public class CookieOptions
1212
{
13+
// True (old): https://tools.ietf.org/html/draft-west-first-party-cookies-07#section-3.1
14+
// False (new): https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.1
15+
internal static bool SuppressSameSiteNone;
16+
17+
static CookieOptions()
18+
{
19+
if (AppContext.TryGetSwitch("Microsoft.AspNetCore.SuppressSameSiteNone", out var enabled))
20+
{
21+
SuppressSameSiteNone = enabled;
22+
}
23+
}
24+
1325
/// <summary>
1426
/// Creates a default cookie with a path of '/'.
1527
/// </summary>
@@ -46,7 +58,7 @@ public CookieOptions()
4658
/// Gets or sets the value for the SameSite attribute of the cookie. The default value is <see cref="SameSiteMode.Unspecified"/>
4759
/// </summary>
4860
/// <returns>The <see cref="SameSiteMode"/> representing the enforcement mode of the cookie.</returns>
49-
public SameSiteMode SameSite { get; set; } = SameSiteMode.Unspecified;
61+
public SameSiteMode SameSite { get; set; } = SuppressSameSiteNone ? SameSiteMode.None : SameSiteMode.Unspecified;
5062

5163
/// <summary>
5264
/// Gets or sets a value that indicates whether a cookie is accessible by client-side script.

src/Security/Authentication/test/OpenIdConnect/OpenIdConnectChallengeTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,7 @@ public async Task ChallengeSetsNonceAndStateCookies(OpenIdConnectRedirectBehavio
453453
Assert.True(correlationCookie.HttpOnly);
454454
Assert.Equal("/signin-oidc", correlationCookie.Path);
455455
Assert.False(StringSegment.IsNullOrEmpty(correlationCookie.Value));
456+
Assert.Equal(Net.Http.Headers.SameSiteMode.None, correlationCookie.SameSite);
456457

457458
Assert.Equal(2, challengeCookies.Count);
458459
}

src/Security/CookiePolicy/src/CookiePolicyOptions.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,22 @@ namespace Microsoft.AspNetCore.Builder
1212
/// </summary>
1313
public class CookiePolicyOptions
1414
{
15+
// True (old): https://tools.ietf.org/html/draft-west-first-party-cookies-07#section-3.1
16+
// False (new): https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.1
17+
internal static bool SuppressSameSiteNone;
18+
19+
static CookiePolicyOptions()
20+
{
21+
if (AppContext.TryGetSwitch("Microsoft.AspNetCore.SuppressSameSiteNone", out var enabled))
22+
{
23+
SuppressSameSiteNone = enabled;
24+
}
25+
}
26+
1527
/// <summary>
1628
/// Affects the cookie's same site attribute.
1729
/// </summary>
18-
public SameSiteMode MinimumSameSitePolicy { get; set; } = SameSiteMode.Unspecified;
30+
public SameSiteMode MinimumSameSitePolicy { get; set; } = SuppressSameSiteNone ? SameSiteMode.None : SameSiteMode.Unspecified;
1931

2032
/// <summary>
2133
/// Affects whether cookies must be HttpOnly.

src/Security/CookiePolicy/src/ResponseCookiesWrapper.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,8 @@ public string CreateConsentCookie()
115115
private bool CheckPolicyRequired()
116116
{
117117
return !CanTrack
118-
|| Options.MinimumSameSitePolicy != SameSiteMode.Unspecified
118+
|| (CookiePolicyOptions.SuppressSameSiteNone && Options.MinimumSameSitePolicy != SameSiteMode.None)
119+
|| (!CookiePolicyOptions.SuppressSameSiteNone && Options.MinimumSameSitePolicy != SameSiteMode.Unspecified)
119120
|| Options.HttpOnly != HttpOnlyPolicy.None
120121
|| Options.Secure != CookieSecurePolicy.None;
121122
}

0 commit comments

Comments
 (0)