Laravel 5.3 Passport oauth — токен множественного доступа для одного клиента — Alexa

Я новичок в oAuth, но мне нужно интегрировать его для навыков домашнего комплекта Alexa.

https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/linking-an-alexa-user-with-a-user-in-your-system< /а>

Я борюсь с этим, но я знаю, что мне нужно использовать предоставление кода авторизации.

После поиска в Google я подумал, что попробую настроить это с помощью Laravel Passport (я планирую создать веб-платформу, поэтому я не использую Laravel исключительно для oAuth) - https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/ 13

Я никогда не использовал Laravel (новичок в PHP), но потратил несколько часов на чтение руководств по Laracast, поэтому у меня есть базовое понимание.

Я смог настроить сервер oAuth с помощью Laravel Passport, создать клиент, использовать идентификатор клиента, секретные URL-адреса и URL-адреса аутентификации, которые я настроил в приложении Alexa, и заработала привязка учетной записи Alexa. Отлично.

Проблема в том, что на данный момент есть только один пользователь, я. В приложении Alexa вы можете настроить только один идентификатор клиента и секрет, и единственный способ для меня связать пользователя — это токен доступа, который Alexa передает в каждом действии/запросе.

Глядя на таблицы oAuth, кажется, что токен доступа (уже недействительный :)) связан с user_id:

+------------------------------------------------- ------------------+------------------------+------ -----+------+--------+----------+------------------ ---+------------------------------------+-------+ | идентификатор | идентификатор_пользователя | client_id | имя | области | отозван | created_at | updated_at | expires_at | +------------------------------------------------- ------------------+------------------------+------ -----+------+--------+----------+------------------ ---+------------------------------------+-------+ | b96dbbbe1f52386bc098dcc106309504a1e546ec05d2a5cf8d37b7460e4ba84ec95e7ff2c0a2d037 | 1 | 9 | НУЛЕВОЙ | [] | 0 | 2017-01-16 08:28:18 | 2017-01-16 08:28:18 | 2018-01-16 08:28:18 | +------------------------------------------------- ------------------+------------------------+------ -----+------+--------+----------+------------------ ---+-----------------------------------+-------+

В Laravel просто регистрировать/создавать пользователей, но на данный момент каждый пользователь может создать только своего собственного клиента, что здесь не сработает, поскольку Alexa настроена на использование одного клиента.

Мне нужно найти способ, чтобы:

1. Пользователи могут входить в мое приложение Laravel, используя свои учетные данные через приложение Alexa (Alexa будет передавать состояние, client_id, response_type, область действия и redirect_uri в качестве строки запроса)

2. Если пользователь аутентифицирован, мое приложение Laravel сгенерирует код авторизации и передаст его обратно в Alexa, включая состояние.

3 — Alexa использует этот код, чтобы затем запросить токен доступа и токен обновления.

4 - Когда генерируется токен доступа, он связывается с user_id этого пользователя (клиента), а не с user_id, который создал клиента (меня)

5 — Когда токен доступа обновляется, снова применяется шаг 4.

Я надеюсь, что вышеизложенное имеет смысл, поскольку я действительно изо всех сил пытался выразить это словами. Вполне возможно, что мое понимание oAuth тоже запутано.

Если я смогу выполнить вышеуказанные шаги, я уверен, что смогу легко создать API/метод, который позволит мне определить, какому пользователю назначен токен доступа, используя SQL-запрос.

Я также должен иметь возможность тренироваться, как отображать компоненты oauth vue, чтобы только пользователь-администратор мог видеть/использовать их для создания клиентов.


person Sparkacus    schedule 16.01.2017    source источник


Ответы (1)


Если вы используете паспорт для собственных приложений, вы можете использовать токены предоставления пароля.

Сначала создайте клиент паролей

php artisan passport:client --password

Затем передайте идентификатор клиента и секрет клиента в form_params и учетные данные пользователя.

$http = new GuzzleHttp\Client;

$response = $http->post('http://your-app.com/oauth/token', [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => 4,
        'client_secret' => 'asefwwsgaqwsfwghhw3eqrfdhe',
        'username' => '[email protected]',
        'password' => '123456',
        'scope' => '',
    ],
]);

return json_decode((string) $response->getBody(), true);

Затем он вернет токен и использует его для перехода к Authorization Bearer your-token в заголовке.

person Jason Llamorin    schedule 14.03.2017