public async Task user_without_cnf_claim_should_fail_validation()
        {
            _stubAuthenticationManager.Identity = _cnfIdentity;

            var result = await DefaultPopSignatureValidator.ValidateTokenAsync(_context.Environment, _stubOptions, "token");

            result.Should().BeFalse();
        }
        public async Task ValidateToken_should_throw_for_invalid_arguments()
        {
            var ctx = new OwinContext();

            await Assert.ThrowsAsync <ArgumentNullException>(async() => await DefaultPopSignatureValidator.ValidateTokenAsync(null, new OwinRequestValidationOptions(), "token"));

            await Assert.ThrowsAsync <ArgumentNullException>(async() => await DefaultPopSignatureValidator.ValidateTokenAsync(ctx.Environment, null, "token"));

            await Assert.ThrowsAsync <ArgumentNullException>(async() => await DefaultPopSignatureValidator.ValidateTokenAsync(ctx.Environment, new OwinRequestValidationOptions(), ""));

            await Assert.ThrowsAsync <ArgumentNullException>(async() => await DefaultPopSignatureValidator.ValidateTokenAsync(ctx.Environment, new OwinRequestValidationOptions(), ""));
        }
        public async Task valid_claim_should_succeed_validation()
        {
            _stubAuthenticationManager.Identity = _cnfIdentity;

            var token = new Dictionary <string, object>
            {
                { "at", "token" }
            };
            var payload  = new EncodingParameters("token");
            var popToken = _signature.Sign(payload);

            var result = await DefaultPopSignatureValidator.ValidateTokenAsync(_context.Environment, _stubOptions, popToken);

            result.Should().BeTrue();
        }
        public async Task negative_timestamp_should_fail_validation()
        {
            _stubAuthenticationManager.Identity = _cnfIdentity;

            var token = new Dictionary <string, object>
            {
                { "at", "token" }
            };
            var payload = new EncodingParameters("token");

            payload.TimeStamp = DateTimeOffset.MinValue;
            var popToken = _signature.Sign(payload);

            var result = await DefaultPopSignatureValidator.ValidateTokenAsync(_context.Environment, _stubOptions, popToken);

            result.Should().BeFalse();
        }
        public async Task no_user_should_fail_validation()
        {
            {
                var result = await DefaultPopSignatureValidator.ValidateTokenAsync(new OwinContext().Environment, _stubOptions, "token");

                result.Should().BeFalse();
            }
            {
                var result = await DefaultPopSignatureValidator.ValidateTokenAsync(_context.Environment, _stubOptions, "token");

                result.Should().BeFalse();
            }
            {
                _stubAuthenticationManager.Identity = new ClaimsIdentity();
                var result = await DefaultPopSignatureValidator.ValidateTokenAsync(_context.Environment, _stubOptions, "token");

                result.Should().BeFalse();
            }
        }
        public async Task too_new_timestamp_should_fail_validation()
        {
            _stubOptions.TimespanValidityWindow = TimeSpan.FromSeconds(300);

            _stubAuthenticationManager.Identity = _cnfIdentity;

            var token = new Dictionary <string, object>
            {
                { "at", "token" }
            };
            var payload = new EncodingParameters("token");

            payload.TimeStamp = DateTimeOffset.UtcNow.AddSeconds(302);
            var popToken = _signature.Sign(payload);

            var result = await DefaultPopSignatureValidator.ValidateTokenAsync(_context.Environment, _stubOptions, popToken);

            result.Should().BeFalse();
        }