private async Task<SuccessfulTokenResponse> CreateTokenIdResponse(AuthorizationCode authCode)
        {
            var tokenLifeTime = authCode.Client.IdentityTokenLifetime;
            var jti = Guid.NewGuid().ToString().ToSha256String();
            var exp = DateTimeOffsetHelper.NewExpirationDate(tokenLifeTime).ToString();
            var accessToken = authCode.SubjectId.ToSha256String();

            var payload = new Dictionary<string, object>
            {
                ["iss"] = _context.OwinConext.Request.PathBase.Value,
                ["sub"] = authCode.SubjectId,
                ["aud"] = _context.OwinConext.Request.PathBase.Value + RequestRoutes.TokenEndPoint.Value,
                ["jti"] = jti,
                ["exp"] = exp,
                ["iat"] = DateTimeOffsetHelper.NewExpirationDate(0),
                ["nonce"] = authCode.Nonce,
                ["at_hash"] = accessToken
            };

            var token = JWT.JsonWebToken.Encode(payload,
                        authCode.Client.ClientSecrets[0],
                        JWT.JwtHashAlgorithm.HS256);

            var key = (Guid.NewGuid().ToString("n") +
                       Guid.NewGuid().ToString("n")).ToSha256String();

            var value = new RefreshToken
            {
                SubjectId = authCode.SubjectId,
                ClientId = authCode.ClientId,
                Client = authCode.Client
            };

            await _refreshTokenStorage.StoreAsync(key, value);

            return new SuccessfulTokenResponse
            {
                access_token = accessToken,
                expires_in = exp,
                refresh_token = key,
                id_token = token
            };
        }
        public Task StoreAsync(string key, RefreshToken value)
        {
            _repository[key] = value;

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