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

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

Сообщение Anonymous »

Я пытаюсь создать токен LiveKit на C# для пользовательской реализации, где доступные SDK Node/Go непригодны для использования.
Я придумал следующий код:

Код: Выделить всё

using System.Security.Claims;
using System.Text;
using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;
using Newtonsoft.Json;

namespace LiveKitToken
{
[Serializable]
class VideoClaim
{
public string room { get; set; }
public bool roomCreate { get; set; }
public bool roomJoin { get; set; }
}

internal class TokenGenerator
{
public string CreateToken(string apiKey, string apiSecret, string roomName, string identity, TimeSpan validFor)
{
var now = DateTime.UtcNow;

VideoClaim videoClaim = new VideoClaim()
{
room = roomName,
roomCreate = true,
roomJoin = true
};

var claims = new Claim[]
{
new Claim(JwtRegisteredClaimNames.Iss, apiKey),
new Claim(JwtRegisteredClaimNames.Sub, identity),
new Claim(JwtRegisteredClaimNames.Nbf, new DateTimeOffset(now).ToUnixTimeSeconds().ToString()),
new Claim(JwtRegisteredClaimNames.Exp, new DateTimeOffset(now.Add(validFor)).ToUnixTimeSeconds().ToString()),
new Claim("video", JsonConvert.SerializeObject(videoClaim, Formatting.Indented))
};

var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(apiSecret));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

var token = new JwtSecurityToken(
claims: claims,
signingCredentials: credentials
);

var tokenHandler = new JwtSecurityTokenHandler();
return tokenHandler.WriteToken(token);
}
}
}
Код работает и фактически генерирует токен JWT, однако токен недействителен (я, конечно, использую действительные apiKey и apiSecret для соответствующего сервера).
Когда я декодирую действительный токен, я вижу это:
Изображение

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

Подробнее здесь: https://stackoverflow.com/questions/774 ... in-c-sharp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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