Example #1
0
        private async Task When_refreshing_reused_absolute_token_then_raise_event_with_two_similar_handlers()
        {
            // Given
            var oldHandle = "old_handle";
            var client    = new Client()
            {
                RefreshTokenUsage      = TokenUsage.ReUse,
                RefreshTokenExpiration = TokenExpiration.Absolute
            };

            var refreshToken = new RefreshToken()
            {
                AccessToken = new Token("token_type")
                {
                    Client = new Client()
                }
            };

            // When
            await _defaultRefreshTokenService.UpdateRefreshTokenAsync(oldHandle, refreshToken, client);

            // Then
            _eventServiceMock.Verify(x => x.RaiseAsync <RefreshTokenRefreshDetails>(
                                         It.Is <Event <RefreshTokenRefreshDetails> >(p => p.Details.OldHandle == oldHandle && p.Details.NewHandle == oldHandle)), Times.Once);
        }
        public async Task UpdateRefreshToken_one_time_use_should_create_new_token()
        {
            var client = new Client
            {
                ClientId          = "client1",
                RefreshTokenUsage = TokenUsage.OneTimeOnly
            };

            var refreshToken = new RefreshToken
            {
                CreationTime = DateTime.UtcNow,
                Lifetime     = 10,
                AccessToken  = new Token
                {
                    ClientId     = client.ClientId,
                    Audiences    = { "aud" },
                    CreationTime = DateTime.UtcNow,
                    Claims       = new List <Claim>()
                    {
                        new Claim("sub", "123")
                    }
                }
            };

            var handle = await _store.StoreRefreshTokenAsync(refreshToken);

            (await _subject.UpdateRefreshTokenAsync(handle, refreshToken, client))
            .Should().NotBeNull()
            .And
            .NotBe(handle);
        }
        public async Task Sliding_Expiration_does_not_exceed_absolute_Expiration()
        {
            var store   = new InMemoryRefreshTokenStore();
            var service = new DefaultRefreshTokenService(store);

            var client = await _clients.FindClientByIdAsync("roclient_sliding_refresh_expiration_one_time_only");

            var token = TokenFactory.CreateAccessToken(client.ClientId, "valid", 60, "read", "write");

            var handle = await service.CreateRefreshTokenAsync(token, client);

            var refreshToken = await store.GetAsync(handle);

            var lifetime = refreshToken.LifeTime;

            await Task.Delay(8000);

            var newHandle = await service.UpdateRefreshTokenAsync(handle, refreshToken, client);

            var newRefreshToken = await store.GetAsync(newHandle);

            var newLifetime = newRefreshToken.LifeTime;

            newLifetime.Should().Be(client.AbsoluteRefreshTokenLifetime);
        }
        public async Task Sliding_Expiration_within_absolute_Expiration()
        {
            var store   = new InMemoryRefreshTokenStore();
            var service = new DefaultRefreshTokenService(store);

            var client = await _clients.FindClientByIdAsync("roclient_sliding_refresh_expiration_one_time_only");

            var token = TokenFactory.CreateAccessToken(client.ClientId, "valid", 60, "read", "write");

            var handle = await service.CreateRefreshTokenAsync(token, client);

            var refreshToken = await store.GetAsync(handle);

            var lifetime = refreshToken.LifeTime;

            await Task.Delay(1000);

            var newHandle = await service.UpdateRefreshTokenAsync(refreshToken, client);

            var newRefreshToken = await store.GetAsync(newHandle);

            var newLifetime = newRefreshToken.LifeTime;

            Assert.AreEqual(newLifetime, client.SlidingRefreshTokenLifetime + 1);
        }
Example #5
0
        public async Task Sliding_Expiration_does_not_exceed_absolute_Expiration()
        {
            now = DateTimeOffset.UtcNow;

            var client = roclient_sliding_refresh_expiration_one_time_only;
            var token  = CreateAccessToken(client, "valid", 60, "read", "write");

            var handle = await service.CreateRefreshTokenAsync(user, token, client);

            var refreshToken = await refreshTokenStore.GetAsync(handle);

            var lifetime = refreshToken.LifeTime;

            now = now.AddSeconds(8);

            var newHandle = await service.UpdateRefreshTokenAsync(handle, refreshToken, client);

            var newRefreshToken = await refreshTokenStore.GetAsync(newHandle);

            var newLifetime = newRefreshToken.LifeTime;

            newLifetime.Should().Be(client.AbsoluteRefreshTokenLifetime);
        }
        public async Task OneTime_Handle_creates_new_Handle()
        {
            var store   = new InMemoryRefreshTokenStore();
            var service = new DefaultRefreshTokenService(store);

            var client = await _clients.FindClientByIdAsync("roclient_absolute_refresh_expiration_one_time_only");

            var token = TokenFactory.CreateAccessToken(client.ClientId, "valid", 60, "read", "write");

            var handle = await service.CreateRefreshTokenAsync(token, client);

            var newHandle = await service.UpdateRefreshTokenAsync(handle, await store.GetAsync(handle), client);

            newHandle.Should().NotBe(handle);
        }
        public async Task ReUse_Handle_reuses_Handle()
        {
            var store   = new InMemoryRefreshTokenStore();
            var service = new DefaultRefreshTokenService(store);

            var client = await _clients.FindClientByIdAsync("roclient_absolute_refresh_expiration_reuse");

            var token = TokenFactory.CreateAccessToken(client.ClientId, "valid", 60, "read", "write");

            var handle = await service.CreateRefreshTokenAsync(token, client);

            var newHandle = await service.UpdateRefreshTokenAsync(await store.GetAsync(handle), client);

            Assert.AreEqual(handle, newHandle);
        }
Example #8
0
        public async Task UpdateRefreshToken_one_time_use_should_create_new_token()
        {
            var client = new Client
            {
                ClientId          = "client1",
                RefreshTokenUsage = TokenUsage.OneTimeOnly
            };

            var refreshToken = new RefreshToken
            {
                CreationTime = DateTime.UtcNow,
                Lifetime     = 10,
            };

            var handle = await _store.StoreRefreshTokenAsync(refreshToken);

            (await _subject.UpdateRefreshTokenAsync(new RefreshTokenUpdateRequest {
                Handle = handle, RefreshToken = refreshToken, Client = client
            }))
            .Should().NotBeNull()
            .And
            .NotBe(handle);
        }
        public async Task Sliding_Expiration_does_not_exceed_absolute_Expiration()
        {
            var store = new InMemoryRefreshTokenStore();
            var service = new DefaultRefreshTokenService(store);

            var client = await _clients.FindClientByIdAsync("roclient_sliding_refresh_expiration_one_time_only");
            var token = TokenFactory.CreateAccessToken(client.ClientId, "valid", 60, "read", "write");

            var handle = await service.CreateRefreshTokenAsync(token, client);
            var refreshToken = await store.GetAsync(handle);
            var lifetime = refreshToken.LifeTime;

            await Task.Delay(8000);

            var newHandle = await service.UpdateRefreshTokenAsync(handle, refreshToken, client);
            var newRefreshToken = await store.GetAsync(newHandle);
            var newLifetime = newRefreshToken.LifeTime;

            newLifetime.Should().Be(client.AbsoluteRefreshTokenLifetime);
        }
        public async Task OneTime_Handle_creates_new_Handle()
        {
            var store = new InMemoryRefreshTokenStore();
            var service = new DefaultRefreshTokenService(store);

            var client = await _clients.FindClientByIdAsync("roclient_absolute_refresh_expiration_one_time_only");
            var token = TokenFactory.CreateAccessToken(client.ClientId, "valid", 60, "read", "write");

            var handle = await service.CreateRefreshTokenAsync(token, client);
            var newHandle = await service.UpdateRefreshTokenAsync(handle, await store.GetAsync(handle), client);

            newHandle.Should().NotBe(handle);
        }