я использую Firebase PHP JWT в качестве основы для генерации токенов ресурсов, чтобы мы могли развернуть продукт на нескольких платформах. Для лучшей практики и удобства обслуживания я решил использовать OAuth для достижения этой цели благодаря доступности.
В настоящее время устройство будет перенаправлено на сервер (через браузер) для входа в систему, который запрашивает базовое имя пользователя, пароль и код безопасности. Я не хотел позволять устройству запрашивать имя пользователя и пароль и отправлять данные в сценарий из-за безопасности.
Устройство также отправляет объем в адресной строке как запрос GET для типа данных, необходимых устройству.
https://www.example.com/oauth/login
&scope=user.profile,user.messages
При успешном входе пользователя в систему с помощью JQuery magic внутри этой страницы загружается другая страница с просьбой разрешить или запретить области.
В случае успеха мой JSON Web Token создается следующим образом:
$secret = 'Some derived code unique to that user that authenticated';
$b64 = array('uuid' => 'The users ID', 'scopes' => array('Contains the scopes the user allowed'));
// Some code to store this key into the database cross-referenced to the uuid
http_response_code(200);
die(json_encode(\Firebase\JWT\JWT::encode($b64, $secret))); // or do I send as a header called Bearer?
Затем устройство отправит этот токен конечной точке сервера ресурсов, которая затем расшифрует его, предоставив мне подтвержденный UUID пользователя и возможности для отправки обратно.
Тем не менее, это не кажется безопасным. Если кто-то захочет, обязательно измените тело JWT (b64) и измените запрошенные области. Текущее решение, которое я придумал:
Сохраните области в базе данных рядом с токеном и uuid.
Тем не менее, проблема, с которой я сталкиваюсь, заключается в том, что мне тогда нужно вставить в токен на предъявителя? Какие данные нужно отправить для генерации токена?
Я посмотрел на этот вопрос но в нем не указано, какие данные должны быть зашифрованы в токене-носителе для использования сервером ресурсов.
Задача ещё не решена.
Других решений пока нет …