Проблема с созданием токена LiveKit JWT на C#C#

Место общения программистов C#
Anonymous
Проблема с созданием токена LiveKit JWT на C#

Сообщение Anonymous »


Я пытаюсь создать токен 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# не предлагает какого-либо типа для добавления объекта среди различных типов, которые он поддерживает.

Думаю, именно поэтому мой токен недействителен, но мне не удалось сгенерировать токен, идентичный действительному.

Любая помощь заранее приветствуется!

Вернуться в «C#»