Inheritance: Thinktecture.IdentityModel.Client.UserInfoResponse
 static string GetClaim(UserInfoResponse userInfo, string claimType) {
     var claim = userInfo.Claims.FirstOrDefault(x => x.Item1 == claimType);
     return claim?.Item2;
 }
 static AccountInfo BuildAccountInfo(UserInfoResponse userInfo) {
     var avatarUrl = GetClaim(userInfo, CustomClaimTypes.AvatarUrl);
     var updatedAt = GetClaim(userInfo, CustomClaimTypes.AvatarUpdatedAt);
     return new AccountInfo {
         Id = Guid.Parse(GetClaim(userInfo, "sub")),
         Roles = userInfo.Claims.Where(x => x.Item1 == "role").Select(x => x.Item2).ToList(),
         DisplayName = GetClaim(userInfo, "nickname"),
         UserName = GetClaim(userInfo, "preferred_username"),
         AvatarURL = avatarUrl,
         HasAvatar = GetClaim(userInfo, CustomClaimTypes.HasAvatar) == "true",
         AvatarUpdatedAt = updatedAt == null ? 0 : long.Parse(updatedAt),
         EmailMd5 = GetClaim(userInfo, CustomClaimTypes.EmailMd5)
     };
 }