Я реализую API-интерфейс вызова видео для моего проекта, когда я создаю токен доступа из https://www.twilio.com/user/account/video/dev-tools/testing-tools от «Создать токен доступа» опция даст мне новый сгенерированный токен и когда я буду использовать его, как показано ниже
var accessToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImN0eSI6InR3aWxpby1mcGE7dj0xIn0.eyJqdGkiOiJTSzk3ZDI2NGIyOTU1YjM2OWMyOGU4MjA4M2E5MjlmMmE0LTE0NjYwODE1NzQiLCJpc3MiOiJTSzk3ZDI2NGIyOTU1YjM2OWMyOGU4MjA4M2E5MjlmMmE0Iiwic3ViIjoiQUM5ZWE5YjY3ZmM3ZjBjMzE2NTBjNGRmNzkyYzhjYjI2NiIsImV4cCI6MTQ2NjA4NTE3NCwiZ3JhbnRzIjp7ImlkZW50aXR5IjoiQUM5ZWE5YjY3ZmM3ZjBjMzE2NTBjNGRmNzkyYzhjYjI2NiIsInJ0YyI6eyJjb25maWd1cmF0aW9uX3Byb2ZpbGVfc2lkIjoiVlMwNmYzZDdiNTczNGVlYTJhZDdjMWEzYzY4YmMzNjhjNSJ9fX0.976iQ2bMB_tAORxjGkgZFJ-UYGfTidTwfvV0fzySMP0";
var accessManager = new Twilio.AccessManager(accessToken);
это будет прекрасно работать для меня.
Теперь, когда я использую второй вариант «Сгенерируйте токен доступа через вспомогательную библиотеку с PHP» и попробуйте сгенерировать токен с
// Create an Access Token
$token = new Services_Twilio_AccessToken(
$accountSid,
$apiKeySid,
$apiKeySecret,
$ttl=3600,
$identity=$identity
);
// Grant access to Conversations
$grant = new Services_Twilio_Auth_ConversationsGrant();
$grant->setConfigurationProfileSid($configurationProfileSid);
$token->addGrant($grant);
echo json_encode(array(
'identity' => $identity,
'token' => $token->toJWT(),
));
он также будет генерировать токен для меня, но когда я использую сгенерированный токен как
Токен ответа:
{"identity":"GoldenZeldaGunsight","token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImN0eSI6InR3aWxpby1mcGE7dj0xIn0
.eyJqdGkiOiJTSzk3ZDI2NGIyOTU1YjM2OWMyOGU4MjA4M2E5MjlmMmE0LTE0NjYxMzc4MTkiLCJpc3MiOiJTSzk3ZDI2NGIyOTU
1YjM2OWMyOGU4MjA4M2E5MjlmMmE0Iiwic3ViIjoiQUM5ZWE5YjY3ZmM3ZjBjMzE2NTBjNGRmNzkyYzhjYjI2NiIsIm5iZiI6MTQ
2NjEzNzgxOSwiZXhwIjoxNDY2MTQxNDE5LCJncmFudHMiOnsiaWRlbnRpdHkiOiJHb2xkZW5aZWxkYUd1bnNpZ2h0IiwicnRjIjp7ImNvbmZpZ3VyYXRpb25fcHJvZmlsZV9zaWQiOiJWUzA2ZjNkN2I1NzM0ZWVhMmFkN2MxYTNjNjhiYzM2OGM1In19fQ
.vkOxI1tMIWNQVm1AUL1ySTZY5ZyjYDTdvWCKnVIkLmk"}
Я использую этот токен ответа в
var accessManager = new Twilio.AccessManager(data.token);
это не будет работать для меня. это даст мне ошибку как
«Не удалось подключиться к Twilio: undefined …»
Отклик :
Thu Jun 23 2016 13:22:58 GMT+0530 (India Standard Time) | sip.transport | received WebSocket text message:
SIP/2.0 403 Forbidden
CSeq: 81 REGISTER
Call-ID: 4704t9hejng0hmhih2ui8m
From: <sip:AC9ea9b67fc7f0c31650c4df792c8cb266@AC9ea9b67fc7f0c31650c4df792c8cb266.endpoint.twilio.com>;tag=l3bsmhddlr
To: <sip:AC9ea9b67fc7f0c31650c4df792c8cb266@AC9ea9b67fc7f0c31650c4df792c8cb266.endpoint.twilio.com>;tag=72132201_50f4772f_8dc5c7c0-ce8e-4a6e-803a-72f6c761338b
Via: SIP/2.0/WSS 127.0.0.1:60911;branch=z9hG4bK2792018;rport=60911
Server: Twilio
X-Twilio-Error: 31201 Authentication failed
Content-Length: 0
Также я проверил оба токена на https://jwt.io , его работа идеально подходит для меня.
Может кто-нибудь, пожалуйста, помогите мне в этом вопросе, где я не прав с кодом, если вы хотите, то я могу также передать другие учетные данные?
Заранее спасибо.
решаемая
Ребята, я получил решение этой проблемы с помощью службы поддержки.
Решение
В моей старой версии /Services/Twilio/AccessToken.php
У меня есть атрибут «nbf»: 1466743969(not-before time), which means it is not valid until
04:52:49 UTC. However according to the timestamp in the log file it was
04:50:27 UTC (10:20:27 IST) `. Если системные часы сервера, генерирующего маркер доступа, будут быстрыми в пару минут, это приведет к недопустимому не ранее времени.
Более поздние версии библиотеки twilio-php опускали "nbf"
атрибут по умолчанию, из-за этой проблемы с перекосом часов. Если вы получили последнюю версию AccessToken.php здесь:
https://github.com/twilio/twilio-php/blob/master/Services/Twilio/AccessToken.php
он будет генерировать токены доступа без "nbf"
,
Альтернативным решением было бы убедиться, что время сервера точное, но вам потребуется доступ администратора для его настройки.
Похоже, вы не включили twilio’sability.php. Согласно Twilio Docs, Ваш PHP должен выглядеть примерно так
include '/pathto/Services/Twilio/Capability.php';
// Twilio API credentials here
$accountSid = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$authToken = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy';
$capability = new Services_Twilio_Capability($accountSid, $authToken);
$capability->allowClientOutgoing('APabe7650f654fc34655fc81ae71caa3ff');
$token = $capability->generateToken();
затем вы получаете доступ к токену через js:
<script type="text/javascript">
Twilio.Device.setup("<?php echo $token; ?>");
Twilio.Device.ready(function (device) {
$("#log").text("Ready");
});
Twilio.Device.error(function (error) {
$("#log").text("Error: " + error.message);
});
Twilio.Device.connect(function (conn) {
$("#log").text("Successfully established call");
});
function call() {
Twilio.Device.connect();
}
</script>
Я надеюсь, что это ставит вас на правильный путь.
РЕДАКТИРОВАТЬ:
Я не осознавал, что приведенный выше скрипт предназначен для аудио, поэтому просто для будущих пользователей решил разместить здесь видео-сценарии.
Клиент: запрос токена доступа (используйте jquery)
$.getJSON('/token', function(data) {
// The data sent back from the server should contain a long string - this is
// the JWT token you need to initialize the SDK. Read more about JWT
// (JSON Web Token) at http://jwt.io
console.log(data.token);
//If your app has an existing authentication system, you can use
// the e-mail address or username that uniquely identifies a user instead.
console.log(data.identity);
});
Сервер: создайте токен доступа (php)
<?php
require_once('./twilio-php/Services/Twilio.php');
require_once('./randos.php');
require_once('./config.php');
// choose a random username for the connecting user
$identity = randomUsername();
// Create access token, which we will serialize and send to the client
$token = new Services_Twilio_AccessToken(
$TWILIO_ACCOUNT_SID,
$TWILIO_API_KEY,
$TWILIO_API_SECRET,
3600,
$identity
);
// Grant access to Conversations
$grant = new Services_Twilio_Auth_ConversationsGrant();
$grant->setConfigurationProfileSid($TWILIO_CONFIGURATION_SID);
$token->addGrant($grant);
// return serialized token and the user's randomly generated ID
echo json_encode(array(
'identity' => $identity,
'token' => $token->toJWT(),
));
Клиент: инициализируйте SDK с помощью токена доступа
// Create an AccessManager to manage our Access Token
var accessManager = new Twilio.AccessManager('$TWILIO_ACCESS_TOKEN');
// Create a Conversations Client and connect to Twilio's backend
conversationsClient = new Twilio.Conversations.Client(accessManager);
conversationsClient.listen().then(function() {
console.log('Connected to Twilio!');
}, function (error) {
console.log('Could not connect to Twilio: ' + error.message);
});
Есть дополнительная информация на Twilio Video Docs и больше информации о работе с разговорами Вот
Я получил решение этой проблемы с помощью службы поддержки.
Решение
В моей старой версии /Services/Twilio/AccessToken.php
У меня есть атрибут "nbf": 1466743969(not-before time)
Это означает, что он не действителен до 04:52:49 UTC. Однако согласно метке времени в файле журнала это было 04:50:27 UTC (10:20:27 IST) `. Если системные часы сервера, генерирующего маркер доступа, будут быстрыми в пару минут, это приведет к недопустимому не ранее времени.
В более поздних версиях библиотеки twilio-php атрибут nbf по умолчанию пропущен из-за этой проблемы с перекосом часов. Если вы получили последнюю версию AccessToken.php здесь:
https://github.com/twilio/twilio-php/blob/master/Services/Twilio/AccessToken.php
он сгенерирует токены доступа без «nbf».
Альтернативным решением было бы убедиться, что время сервера точное, но вам потребуется доступ администратора для его настройки.