public async Task CookieExpirationCanBeOverridenInSignin() { var clock = new TestClock(); TestServer server = CreateServer(new CookieAuthenticationOptions { SystemClock = clock, ExpireTimeSpan = TimeSpan.FromMinutes(10), SlidingExpiration = false, }, context => { context.Authentication.SignIn( new AuthenticationProperties() { ExpiresUtc = clock.UtcNow.Add(TimeSpan.FromMinutes(5)) }, new ClaimsIdentity(new GenericIdentity("Alice", "Cookies"))); return(Task.FromResult <object>(null)); }); Transaction transaction1 = await SendAsync(server, "http://example.com/testpath"); Transaction transaction2 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue); clock.Add(TimeSpan.FromMinutes(3)); Transaction transaction3 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue); clock.Add(TimeSpan.FromMinutes(3)); Transaction transaction4 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue); transaction2.SetCookie.ShouldBe(null); FindClaimValue(transaction2, ClaimTypes.Name).ShouldBe("Alice"); transaction3.SetCookie.ShouldBe(null); FindClaimValue(transaction3, ClaimTypes.Name).ShouldBe("Alice"); transaction4.SetCookie.ShouldBe(null); FindClaimValue(transaction4, ClaimTypes.Name).ShouldBe(null); }
public async Task CookieIsRenewedWithSlidingExpiration() { var clock = new TestClock(); TestServer server = CreateServer(new CookieAuthenticationOptions { SystemClock = clock, ExpireTimeSpan = TimeSpan.FromMinutes(10), SlidingExpiration = true, }, SignInAsAlice); Transaction transaction1 = await SendAsync(server, "http://example.com/testpath"); Transaction transaction2 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue); clock.Add(TimeSpan.FromMinutes(4)); Transaction transaction3 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue); clock.Add(TimeSpan.FromMinutes(4)); // transaction4 should arrive with a new SetCookie value Transaction transaction4 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue); clock.Add(TimeSpan.FromMinutes(4)); Transaction transaction5 = await SendAsync(server, "http://example.com/me/Cookies", transaction4.CookieNameValue); transaction2.SetCookie.ShouldBe(null); FindClaimValue(transaction2, ClaimTypes.Name).ShouldBe("Alice"); transaction3.SetCookie.ShouldBe(null); FindClaimValue(transaction3, ClaimTypes.Name).ShouldBe("Alice"); transaction4.SetCookie.ShouldNotBe(null); FindClaimValue(transaction4, ClaimTypes.Name).ShouldBe("Alice"); transaction5.SetCookie.ShouldBe(null); FindClaimValue(transaction5, ClaimTypes.Name).ShouldBe("Alice"); }
public async Task CookieExpirationCanBeOverridenInEvent() { var clock = new TestClock(); TestServer server = CreateServer(new CookieAuthenticationOptions { SystemClock = clock, ExpireTimeSpan = TimeSpan.FromMinutes(10), SlidingExpiration = false, Provider = new CookieAuthenticationProvider() { OnResponseSignIn = context => { context.Properties.ExpiresUtc = clock.UtcNow.Add(TimeSpan.FromMinutes(5)); } } }, SignInAsAlice); Transaction transaction1 = await SendAsync(server, "http://example.com/testpath"); Transaction transaction2 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue); clock.Add(TimeSpan.FromMinutes(3)); Transaction transaction3 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue); clock.Add(TimeSpan.FromMinutes(3)); Transaction transaction4 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue); transaction2.SetCookie.ShouldBe(null); FindClaimValue(transaction2, ClaimTypes.Name).ShouldBe("Alice"); transaction3.SetCookie.ShouldBe(null); FindClaimValue(transaction3, ClaimTypes.Name).ShouldBe("Alice"); transaction4.SetCookie.ShouldBe(null); FindClaimValue(transaction4, ClaimTypes.Name).ShouldBe(null); }
public async Task CookieStopsWorkingAfterExpiration() { var clock = new TestClock(); TestServer server = CreateServer(new CookieAuthenticationOptions { SystemClock = clock, ExpireTimeSpan = TimeSpan.FromMinutes(10), SlidingExpiration = false, }, SignInAsAlice); Transaction transaction1 = await SendAsync(server, "http://example.com/testpath"); Transaction transaction2 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue); clock.Add(TimeSpan.FromMinutes(7)); Transaction transaction3 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue); clock.Add(TimeSpan.FromMinutes(7)); Transaction transaction4 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue); transaction2.SetCookie.ShouldBe(null); FindClaimValue(transaction2, ClaimTypes.Name).ShouldBe("Alice"); transaction3.SetCookie.ShouldBe(null); FindClaimValue(transaction3, ClaimTypes.Name).ShouldBe("Alice"); transaction4.SetCookie.ShouldBe(null); FindClaimValue(transaction4, ClaimTypes.Name).ShouldBe(null); }
public async Task CookieContainsIdentity() { var clock = new TestClock(); TestServer server = CreateServer(new CookieAuthenticationOptions { SystemClock = clock }, SignInAsAlice); Transaction transaction1 = await SendAsync(server, "http://example.com/testpath"); Transaction transaction2 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue); FindClaimValue(transaction2, ClaimTypes.Name).ShouldBe("Alice"); }
public async Task CookieExpirationCanBeOverridenInSignin() { var clock = new TestClock(); TestServer server = CreateServer(new CookieAuthenticationOptions { SystemClock = clock, ExpireTimeSpan = TimeSpan.FromMinutes(10), SlidingExpiration = false, }, context => { context.Authentication.SignIn( new AuthenticationProperties() { ExpiresUtc = clock.UtcNow.Add(TimeSpan.FromMinutes(5)) }, new ClaimsIdentity(new GenericIdentity("Alice", "Cookies"))); return Task.FromResult<object>(null); }); Transaction transaction1 = await SendAsync(server, "http://example.com/testpath"); Transaction transaction2 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue); clock.Add(TimeSpan.FromMinutes(3)); Transaction transaction3 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue); clock.Add(TimeSpan.FromMinutes(3)); Transaction transaction4 = await SendAsync(server, "http://example.com/me/Cookies", transaction1.CookieNameValue); transaction2.SetCookie.ShouldBe(null); FindClaimValue(transaction2, ClaimTypes.Name).ShouldBe("Alice"); transaction3.SetCookie.ShouldBe(null); FindClaimValue(transaction3, ClaimTypes.Name).ShouldBe("Alice"); transaction4.SetCookie.ShouldBe(null); FindClaimValue(transaction4, ClaimTypes.Name).ShouldBe(null); }