Я пытаюсь реализовать процесс спаривания для Android/Linux OS TV (Model 43PUS8309/62, API версия 6) в моем приложении Android (Java/Kotlin с OKTTP). Телевизор использует API, похожий на соединение, в порту 1926 (https). < /P>
Процесс спаривания, как понятно из онлайн-ресурсов и сценария Python (philips_android_tv-master/philips.py), включает в себя эти основные шаги:
TV отвечает 200 OK и корпусом JSON, содержащим auth_key и timempame . На экране телевизора появляется PIN -код. Аутентификация: для этого запроса требуется аутентификация HTTP Digest.
Имя пользователя: client_generated_id от шага 1.
Пароль: auth_key Полезная нагрузка: < /strong>
{
"auth": {
"pin": "USER_ENTERED_PIN",
"auth_timestamp": TIMESTAMP_FROM_STEP_1, // Sent as a number
"auth_signature": "CALCULATED_HMAC_SIGNATURE",
"auth_AppId": "1" // Or 1 as number
},
"device": { /* Same device object as in /pair/request */ }
}
< /code>
< /li> HMAC Signature (auth_signature): рассчитывается как base64.encode (utf8_bytes (hexstring (hmac_sha1 (decoded_secret_key, utf8_bytes (timestamp_string + pin_string)))) . Secret_key является известной фиксированной строкой Base64.
Проблема:
Оба My Android -приложение и сценарий Python. Пара Code:
/timestamp получена.
[*] Первая попытка опубликовать в/6/pare/grant (без авторизации заголовок в моем приложении или обработанной по запросам библиотеки в Python) правильно получает 401 unauthorified tv. Www-authenticate заголовок: digest realm = "xtv", nonce = "some_nonce", qop = "auth" (no opaque Параметр).
[*] как мое приложение, так и сценарий Python, затем правильно рассчитывать Autwortization headse used ewortization и телевизор AUTH_KEY как пароль.
[*] Второй запрос на пост в/6/pare/Grant (с той же полезной нагрузкой JSON, но теперь включает в себя авторизацию: Digest ... Header) получает 200 ok Code. {"error_id": "Invalid_pin", "error_text": "Неверные параметры аутентификации"} как для моего приложения, так и для скрипта Python.
то, что я проверял:
. Работа: Получение 200 OK на Second/Pair/Grant Попытка указывает, что телевизор принимает учетные данные. Скрипт Python с использованием идентичной временной метки , pin и secret_key входы. Конечная строки Base64 auth_signature - идентичные .
[*] Пример Python (timestamp = "2527", pin = "8763"): auth_signature = "ztkwmwe4mtqyndhmmmzdkzdaznwrjmjy1yzfmm2vlzwvim2jlytgyna =="
[*] my java -код с теми же входными данными дает одну и ту же строку Base64. /> Структура полезной нагрузки JSON: < /strong>
auth_timestamp отправляется в виде числового значения (долго в Java, int in Python) в JSON.
auth_AppId отправляется как числовое 1 .
Объект в полезной нагрузке для/pare/Grant использует тот же идентификатор (сгенерированный клиентом), как и в /пейр /рекест. app_id из официальных журналов удаленного приложения Philips TV в моем устройстве json объект для обоих/pair/request и/pare/rant . Это не изменило результат "vallid_pin". Приложение делает. Это также не изменило результат «vangilid_pin» для /пейр/графы/code>.
фрагмент скрипта Python (исправлено и ведение журнала):
Я пытаюсь реализовать процесс спаривания для Android/Linux OS TV (Model 43PUS8309/62, API версия 6) в моем приложении Android (Java/Kotlin с OKTTP). Телевизор использует API, похожий на соединение, в порту 1926 (https). < /P> Процесс спаривания, как понятно из онлайн-ресурсов и сценария Python (philips_android_tv-master/philips.py), включает в себя эти основные шаги: [list] [*] [b] post to/6/pare/request [/b]: [list] Payload: {"Scope": [Read "," write "," управление "]," Device_: "Device_": ",", ",", ",": ",": ",", ":", ":", ":", ",": ",": ",": ",": ",": ",": ",", ":", ":", ":", ",": ":": ",": ",": ",": ",": ",": ",", ":", ":": ",": ",", ":", ":" "...", "app_id": "...", "app_name": "...", "type": "Native", "id": "client_generated_id"}} [*] TV отвечает 200 OK и корпусом JSON, содержащим auth_key и timempame . На экране телевизора появляется PIN -код. Аутентификация: для этого запроса требуется аутентификация HTTP Digest.
Имя пользователя: client_generated_id от шага 1. [*] Пароль: auth_key Полезная нагрузка: < /strong> { "auth": { "pin": "USER_ENTERED_PIN", "auth_timestamp": TIMESTAMP_FROM_STEP_1, // Sent as a number "auth_signature": "CALCULATED_HMAC_SIGNATURE", "auth_AppId": "1" // Or 1 as number }, "device": { /* Same device object as in /pair/request */ } } < /code> < /li> [b] HMAC Signature (auth_signature): [/b] рассчитывается как base64.encode (utf8_bytes (hexstring (hmac_sha1 (decoded_secret_key, utf8_bytes (timestamp_string + pin_string)))) . Secret_key является известной фиксированной строкой Base64. [/list]
[/list] [b] Проблема: [/b] Оба My Android -приложение и сценарий Python. Пара Code:
/timestamp получена. [*] Первая попытка опубликовать в/6/pare/grant (без авторизации заголовок в моем приложении или обработанной по запросам библиотеки в Python) правильно получает [b] 401 unauthorified [/b] tv. Www-authenticate заголовок: digest realm = "xtv", nonce = "some_nonce", qop = "auth" (no opaque Параметр). [*] как мое приложение, так и сценарий Python, затем правильно рассчитывать Autwortization headse used ewortization и телевизор AUTH_KEY как пароль. [*] Второй запрос на пост в/6/pare/Grant (с той же полезной нагрузкой JSON, но теперь включает в себя авторизацию: Digest ... Header) получает [b] 200 ok Code. {"error_id": "Invalid_pin", "error_text": "Неверные параметры аутентификации"} как для моего приложения, так и для скрипта Python. [/b]
[b] то, что я проверял: [/b]
. Работа: Получение 200 OK на Second/Pair/Grant Попытка указывает, что телевизор принимает учетные данные. Скрипт Python с использованием идентичной временной метки , pin и secret_key входы. Конечная строки Base64 auth_signature - [b] идентичные [/b]. [*] Пример Python (timestamp = "2527", pin = "8763"): auth_signature = "ztkwmwe4mtqyndhmmmzdkzdaznwrjmjy1yzfmm2vlzwvim2jlytgyna ==" [*] my java -код с теми же входными данными дает одну и ту же строку Base64. /> [b] Структура полезной нагрузки JSON: < /strong> [list] auth_timestamp отправляется в виде числового значения (долго в Java, int in Python) в JSON. [*]auth_AppId отправляется как числовое 1 . [*] Объект в полезной нагрузке для/pare/Grant использует тот же идентификатор (сгенерированный клиентом), как и в /пейр /рекест. app_id из официальных журналов удаленного приложения Philips TV в моем устройстве json объект для обоих/pair/request и/pare/rant . Это не изменило результат "vallid_pin". Приложение делает. Это также не изменило результат «vangilid_pin» для /пейр/графы/code>. [/list] фрагмент скрипта Python (исправлено и ведение журнала): [/b]
Я пытаюсь реализовать процесс спаривания для Android/Linux OS TV (Model 43PUS8309/62, API версия 6) в моем приложении Android (Java/Kotlin с OKTTP). Телевизор использует API, похожий на соединение, в порту 1926 (https).
Процесс спаривания, как...
Я работаю над приложением для смарт-карт, в котором мне нужно изменить ПИН-код пользователя с помощью ПИН-кода администратора, но я столкнулся с проблемой. Несмотря на использование функции pfnCardChangeAuthenticatorEx из минидрайвера и обеспечение...