public static Token CreateIdentityToken()
        {
            var token = new Token(Constants.TokenTypes.IdentityToken)
            {
                Audience = "client",
                Issuer = "issuer",
                Lifetime = 60,

                Claims = new List<Claim> 
                {
                    new Claim("sub", "subject")
                }
            };

            return token;
        }
        public static Token CreateAccessToken()
        {
            var token = new Token(Constants.TokenTypes.AccessToken)
            {
                Audience = "audience",
                Issuer = "issuer",
                Lifetime = 60,

                Claims = new List<Claim> 
                {
                    new Claim("client_id", "client"),
                    new Claim("scope", "openid")
                }
            };

            return token;
        }
        public async Task Create_and_Validate_JWT_AccessToken_Valid()
        {
            var tokenService = new DefaultTokenService(
                null,
                _settings,
                null,
                null);

            var token = new Token(Constants.TokenTypes.AccessToken)
            {
                Audience = string.Format(Constants.AccessTokenAudience, _settings.GetIssuerUri()),
                Issuer = _settings.GetIssuerUri(),
                Lifetime = 60,
                Client = await _settings.FindClientByIdAsync("client")
            };

            var jwt = await tokenService.CreateSecurityTokenAsync(token);

            var validator = new TokenValidator(_settings, null, null, new DebugLogger());
            var result = await validator.ValidateAccessTokenAsync(jwt);

            Assert.IsFalse(result.IsError);
            Assert.IsNotNull(result.Claims);
        }
        protected virtual IEnumerable<Claim> ReferenceTokenToClaims(Token token)
        {
            var claims = new List<Claim>
            {
                new Claim(Constants.ClaimTypes.Audience, token.Audience),
                new Claim(Constants.ClaimTypes.Issuer, token.Issuer),
                new Claim(Constants.ClaimTypes.NotBefore, token.CreationTime.ToEpochTime().ToString()),
                new Claim(Constants.ClaimTypes.Expiration, token.CreationTime.AddSeconds(token.Lifetime).ToEpochTime().ToString())
            };

            claims.AddRange(token.Claims);

            return claims;
        }
        public Task StoreAsync(string key, Token value)
        {
            _repository[key] = value;

            return Task.FromResult<object>(null);
        }