public async Task <UnsignedPayload> VerifyUnsign(string creyticket)
        {
            var(issuer, data) = SignatureHelper.Data(creyticket.Trim(), secret_);
            var values = data.ToDictionary(x => x.Type, x => x.Value);
            var result = new UnsignedPayload
            {
                version   = byte.Parse(values[nameof(SignedPayload.version)]),
                issuer    = issuer,
                timestamp = DateTimeOffset.Parse(values[nameof(SignedPayload.timestamp)]),
                callback  = new Uri(values[nameof(UnsignedPayload.callback)]),
            };

            // TODO: validate exception are mapped to proper HTTP codes
            if (result.timestamp >= DateTimeOffset.UtcNow.AddSeconds(30) || result.timestamp < new DateTimeOffset(new DateTime(2020, 01, 01)))
            {
                throw new ValidationException($"Invalid {nameof(result.timestamp)}");
            }

            var user = await users_.Value.FindUserByAccountIdAsync(result.issuer) ?? throw new AccountNotFoundException(result.issuer.ToString());

            return(result);
        }