Laravel Passport - какой грант использовать для приложений моих пользователей? - PullRequest
0 голосов
/ 29 июня 2018

У меня есть приложение, в котором пользователи могут регистрироваться и добавлять свои собственные приложения (веб-сайты, мобильные приложения).

Для каждого из этих приложений я хочу предоставить доступ к своему API и разрешить получать продукты из моей базы данных.

Например: Пользователь X регистрируется в моем приложении, добавляет свой блог user-X-blog.com и получает токен доступа. Затем он может позвонить в мой API и получить несколько продуктов для отображения в своем блоге.

Какой грант я должен реализовать, чтобы сделать мой API на основе Laravel Passport безопасным и полезным (каждое пользовательское приложение со своим собственным токеном, не требуется вход пользователя в систему для вызова API, долгоживущие токены)?

Целесообразно ли создавать для каждого пользователя приложения выделенный клиент и использовать клиентские учетные данные гранта? Это выглядит не очень безопасно для меня (или, возможно, я ошибаюсь).

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Из вашего требования ясно, что сторонний доступ к вашему API. Есть 2 способа разрешить доступ третьим лицам

  1. Традиционный oAuth (https://laravel.com/docs/5.6/passport#issuing-access-tokens)

Но этот подход подходит, если пользователь вашего клиента имеет учетную запись в вашей системе. Как мы используем Facebook, Google и т. Д.

  1. токены предоставления учетных данных клиента (https://laravel.com/docs/5.6/passport#client-credentials-grant-tokens) Это подходит для аутентификации между компьютерами.

Вы можете использовать второй вариант. Что вы можете сделать, так это зарегистрировать своего клиента на своей стороне и сгенерировать client ID и client secret, а затем они будут использовать эту информацию для аутентификации со своего сервера на ваш сервер, и ваш сервер вернет маркер доступа. Нет участия клиента, и после этого либо их сервер, либо клиент может напрямую получить доступ к вашему API, используя accessToken.

Надеюсь, это может очистить вас.

0 голосов
/ 29 июня 2018

В вашей ситуации я думаю, что Персональные токены доступа - лучший вариант:

Каждый уникальный пользователь, который подписывается и добавляет свой блог, получает уникальный токен:

$user = App\User::find(1);

// Creating a token without scopes...
$token = $user->createToken('Token Name')->accessToken;

// Creating a token with scopes...
$token = $user->createToken('My Token', ['place-orders'])->accessToken;

Затем вы можете отправлять запросы и передавать токен в качестве заголовка авторизации:

$response = $client->request('GET', '/api/user', [
    'headers' => [
        'Accept' => 'application/json',
        'Authorization' => 'Bearer '.$accessToken,
    ],
]);

Вы также можете установить lifetimes для своих токенов в методе boot вашего AuthServiceProvider:

public function boot()
{
    $this->registerPolicies();

    Passport::routes();

    Passport::tokensExpireIn(now()->addDays(15));

    Passport::refreshTokensExpireIn(now()->addDays(30));
}
...