Реализация клиентского OAuth на устройствах без постоянного хранилища

Я реализую потребителя OAuth, который будет работать на различных приставках. Некоторые из них не предоставляют никаких средств для постоянного хранения пользовательских данных. При выключении приставки все данные теряются (кроме прошивки, конечно). Как тогда я могу хранить токены доступа? Требуется, чтобы пользователь аутентифицировался только один раз и чтобы токены доступа имели длительный срок действия (до тех пор, пока сам пользователь не отзовет их). Так что об аутентификации каждый раз при включении STB не может быть и речи. Является ли в этом случае OAuth бесполезным? Могу ли я использовать другие данные (например, MAC или некоторые уникальные данные HW) вместо токенов доступа? Я знаю, что их можно подделать, но других идей у ​​меня нет.

Ах, кстати, я тоже реализую серверную часть (поставщика услуг), но поскольку она будет использоваться и сторонними потребителями, я должен предоставить им «правильный» OAuth и могу внести некоторые изменения в мое потребительское приложение, так как оно, очевидно, является надежным.

Спасибо!


person paaro    schedule 14.09.2011    source источник


Ответы (1)


Можете ли вы иметь веб-сервис на стороне сервера (защищенный SSL и цифровым сертификатом, чтобы никто другой не мог получить к нему доступ), который принимает уникальный MAC (или данные HW) и возвращает правильный токен OAuth на STB?

Таким образом, поток будет следующим: 1) STB загружается, отправляет уникальные данные HW на сервер через веб-службу для получения токена OAuth - если токен существует, перейдите к шагу 4, в противном случае перейдите к шагу 2 2) Пользователь выполняет аутентификацию OAuth на STB. 3) STB хранит токен в локальной памяти и отправляет его через веб-службу на сторону сервера вместе с некоторыми уникальными данными HW 4) STB использует токен OAuth для выполнения обычных функций 5) STB отключен, выключен и т. Д., Что заставляет его терять токен из локального память Вернуться к шагу 1.

Проблемы, на которые следует обратить внимание: A) Пользователь возвращает STB, поскольку он больше не нуждается в обслуживании. Вам нужно как-то очистить токен, если другой пользователь получит эту STB. Вы не хотите, чтобы новый пользователь получил данные старого пользователя. B) STB сломается, и пользователь должен получить новый. Если им придется пройти повторную аутентификацию или токен автоматически перейдет на новые уникальные HW-данные

person Mark S.    schedule 14.09.2011
comment
Я не уверен в уникальных данных HW, доступны они или нет. Если я использую MAC, меня беспокоит подмена MAC. Если токен доступа имеет неопределенный срок жизни и кто-то каким-то образом считывает чужой MAC-адрес STB, это может быть довольно опасно. Я буду применять SSL, но я плохо знаком с самим протоколом. Можете ли вы перехватить MAC-адрес в зашифрованном HTTP-пакете? Как ответ от сервера направляется соответствующему клиенту (STB), если MAC зашифрован? - person paaro; 15.09.2011
comment
Вам действительно нужно отправить уникальный HW через SSL в веб-службу, защищенную цифровым сертификатом. SSL скроет данные, а сертификат гарантирует, что никто не сможет получить доступ к веб-сервису без вашего разрешения. Уникальные данные HW (MAC и т. Д.) Будут в данных веб-службы. Поскольку соединение является SSL, никто не сможет его отследить и получить. - person Mark S.; 15.09.2011
comment
Когда вы упоминаете сертификат, вы имеете в виду сертификат на стороне сервера или на стороне клиента? Сертификат на стороне сервера является обязательным, но мы не хотим использовать сертификаты на стороне клиента, поскольку у пользователя может быть больше устройств, и обработка клиентских сертификатов может стать довольно громоздкой. - person paaro; 15.09.2011
comment
Я говорю о безопасности на уровне сообщений веб-службы. Сервер будет иметь специальные операции веб-службы, которые может вызывать только ваш STB. Если безопасность веб-службы не указана в заголовке, она блокирует запрос. Это останавливает третьи стороны от доступа к этой веб-службе. - person Mark S.; 15.09.2011
comment
Теперь это что-то совершенно новое для меня. Могут ли мне помочь примеры или руководства на стороне сервера (Java) и клиента (JS)? - person paaro; 15.09.2011
comment
В предыдущем вопросе есть примеры. - person Mark S.; 15.09.2011