Я пытаюсь создать токен LiveKit на C# для пользовательской реализации, где доступные SDK Node/Go непригодны для использования.
Я придумал следующий код:
с использованием System.Security.Claims; использование System.Text; используя System.IdentityModel.Tokens.Jwt; использование Microsoft.IdentityModel.Tokens; использование Newtonsoft.Json; пространство имен LiveKitToken { [Сериализуемый] класс ВидеоЗаявка { общественная струнная комната {получить; набор; } общественный bool roomCreate { get; набор; } общественная bool roomJoin { get; набор; } } внутренний класс TokenGenerator { общедоступная строка CreateToken (строка apiKey, строка apiSecret, строка roomName, идентификатор строки, TimeSpan validFor) { вар сейчас = DateTime.UtcNow; VideoClaim videoClaim = новый VideoClaim() { комната = имя комнаты, комнатаСоздать = правда, комнатаДжоин = правда }; вар претензии = новая претензия [] { новое утверждение (JwtRegisteredClaimNames.Iss, apiKey), новое утверждение (JwtRegisteredClaimNames.Sub, личность), новый запрос (JwtRegisteredClaimNames.Nbf, новый DateTimeOffset (сейчас).ToUnixTimeSeconds().ToString()), новый Claim(JwtRegisteredClaimNames.Exp, новый DateTimeOffset(now.Add(validFor)).ToUnixTimeSeconds().ToString()), новый Claim("видео", JsonConvert.SerializeObject(videoClaim, Formatting.Indented)) }; вар SecurityKey = новый SymmetricSecurityKey(Encoding.UTF8.GetBytes(apiSecret)); учетные данные var = новые SigningCredentials (securityKey, SecurityAlgorithms.HmacSha256); вар токен = новый JwtSecurityToken( претензии: претензии, SigningCredentials: учетные данные ); вар tokenHandler = новый JwtSecurityTokenHandler (); вернуть tokenHandler.WriteToken(токен); } } } Код работает и фактически генерирует токен JWT, однако токен недействителен (я, конечно, использую действительные apiKey и apiSecret для соответствующего сервера).
Когда я декодирую действительный токен, я вижу это:

На предыдущем изображении мы можем видеть, что утверждение видео является объектом, но для моего кода я получаю следующее:

В этом случае утверждение видео всегда включается в виде строки, более того, конструктор утверждения в C# не предлагает какого-либо типа для добавления объекта среди различных типов, которые он поддерживает.
Думаю, именно поэтому мой токен недействителен, но мне не удалось сгенерировать токен, идентичный действительному.
Любая помощь заранее приветствуется!
Мобильная версия