OpenTok TokBox: доступ к REST API запрещен при запуске прямой трансляции

Следуйте процедурам, описанным в документации SDK.

Использование .NET WebRequest для вызова API. StatusCode «Запрещено» возвращается вместе с дополнительным сообщением «Недопустимый формат эмитента».

В чем я не уверен, так это в том, как я должен генерировать токен для вызова. Инструкции в разделе, на который я ссылался, просто говорят:

Вызовы REST API должны проходить аутентификацию с использованием пользовательского заголовка HTTP — X-OPENTOK-AUTH — вместе с веб-токеном JSON. Создайте токен JWT со следующими утверждениями.

Это заставило меня поверить, что для создания токена я должен использовать библиотеку JWT по своему выбору. Так я и сделал. Я использовал .NET System.IdentityModel.Tokens.Jwt.

Однако в разделе сайта .NET это отображается:

Вы можете сгенерировать токен, либо вызвав метод GenerateToken... экземпляра OpenTokSDK.OpenTok, либо вызвав метод GenerateToken... экземпляра OpenTokSDK.Session после его создания.

Это то, что я должен был сделать? Это то, что не так?

Я могу включить свой код, но нет смысла, если я вообще выбрал неправильный подход.


person Robert    schedule 05.02.2019    source источник


Ответы (1)


Евангелист-разработчик TokBox здесь.

В API OpenTok есть две концепции токенов. Один из токенов используется для аутентификации сессии OpenTok, а другой — это токен JWT, используемый для аутентификации каждого HTTP-запроса, который вы делаете со стороны сервера.

Похоже, токен, который вы пытаетесь создать, используется для взаимодействия с OpenTok REST API. . Каждый запрос, который вы делаете к OpenTok REST API, должен иметь токен JWT, подписанный вашим ключом API и секретом API. Подписание будет выглядеть примерно так:

var payload = new Dictionary<string, object>
  {
    { "iss", "12321312" }, // apiKey
    { "ist", "project" },
    { "iat", now }, // current time
    { "exp", expiry } // current time + 300 seconds
  };

Вы можете использовать GenerateJWT в OpenTok .NET SDK в качестве ссылки. В качестве альтернативы вы можете использовать OpenTok .NET SDK, чтобы сделать запрос StartBroadcast, который будет обрабатывать создание токена JWT для вас.

Наконец, для аутентификации сеанса OpenTok вам необходимо использовать один из SDK OpenTok Server. Обратите внимание, что токены, используемые для аутентификации сеансов OpenTok, не создаются какой-либо библиотекой.

person Manik    schedule 05.02.2019
comment
Благодарю за разъяснение. Я решил попробовать маршрут StartBroadcast. Генерируется исключение и возвращается сообщение {Удаленный сервер вернул ошибку: (403) Запрещено.}. Я использую учетную запись apiKey и apiSecret при создании экземпляра OpenTok. Это правильно? - person Robert; 06.02.2019
comment
Хм, был ли идентификатор сеанса, для которого вы пытались запустить трансляцию, сгенерирован тем же ключом API и секретом, которые вы использовали для создания своего экземпляра OpenTok? Также убедитесь, что вы используете TLS 1.1 или выше. Дополнительная информация об элементе TLS здесь: stackoverflow.com/questions/51659216/ - person Manik; 06.02.2019
comment
Спасибо еще раз. Пока без кубиков. 4.6.2 .net-фреймворк. Попытались явно настроить TLS 1.1 и 1.2 в коде. Убедился, что идентификатор сеанса, для которого я пытался запустить трансляцию, был сгенерирован тем же ключом API и секретом, которые я использовал для создания экземпляра OpenTok. Я даже тщательно прошел и повторил процесс - сгенерировал новый идентификатор сеанса и токен на основе проекта (Роль = Издатель, Срок действия = 30 дней). Тот же результат. Используя тот же набор ключей/токенов, я могу успешно публиковать/подписываться на несколько камер и просматривать композитный канал. Я просто не могу попасть в API. - person Robert; 07.02.2019
comment
Роберт, не могли бы вы сообщить о проблеме в репозиторий .NET SDK и поделиться своим кодом? Будет легче отлаживать, и я хотел бы увидеть, как это работает для вас! github.com/opentok/Opentok-.NET-SDK - person Manik; 07.02.2019
comment
Виноват. Использовал комбинацию ключа/секрета моей учетной записи, а не комбинацию моего проекта при создании моего экземпляра OpenTok на стороне сервера. Итак, ответ: startBroadcast - хороший вариант .net и использует только apiKey и секрет проекта. Не используйте ключи уровня учетной записи для этой операции. Большое спасибо за это. Кажется, я не могу воспроизвести поток, потому что мое приложение потокового сервера Wowza требует аутентификации. Есть ли в startBroadcast() механизм для передачи данных аутентификации потока? - person Robert; 08.02.2019
comment
О, рад, что вы нашли его! Да, вы должны использовать ключ и секрет API проекта для основных функций API. Ключ и секрет API учетной записи предназначены для программного создания/удаления проектов. Что касается потоковой передачи wowza, отправьте сообщение о проблеме в репозиторий .NET. Я также рекомендую проверить приложение для трансляции, чтобы увидеть образец :) - person Manik; 08.02.2019
comment
Похоже, я могу изменить свой сервер Wowza, чтобы он принимал аутентификацию через URL. Мне придется пойти туда сейчас в интересах целесообразности (что-то вроде крайнего срока). Вернусь, когда будет больше времени. Но здесь был дан ответ на главный вопрос - используйте startBroadcast и используйте ключ/секрет проекта. Спасибо большое. - person Robert; 12.02.2019