Вступление
По умолчанию Laravel поставляется с простым решением для аутентификации API с помощью случайного токена, назначенного каждому пользователю вашего приложения. В вашем конфигурационном файле защита уже определена и использует драйвер. Этот драйвер отвечает за проверку токена API во входящем запросе и проверку его соответствия назначенному токену пользователя в базе данных.config/auth.php
api
token
Примечание. Хотя Laravel поставляется с простым средством аутентификации на основе токенов, мы настоятельно рекомендуем использовать Laravel Passport для надежных производственных приложений, которые предлагают аутентификацию API.
Конфигурация
Подготовка базы данных
Перед использованием token
драйвера вам нужно будет создать миграцию, которая добавит api_token
столбец в вашу users
таблицу:
Schema::table('users', function ($table) {
$table->string('api_token', 80)->after('password')
->unique()
->nullable()
->default(null);
});
Как только миграция будет создана, запустите команду migrate
Artisan.
Генерация токенов
Как только api_token
столбец будет добавлен в вашу users
таблицу, вы готовы назначить случайные токены API каждому пользователю, который регистрируется в вашем приложении. Вы должны назначить эти токены при создании User
модели для пользователя во время регистрации. При использовании лесов аутентификации, предоставленных командой Artisan, это может быть сделано в методе :make:auth
create
RegisterController
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Hash;
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
'api_token' => Str::random(60),
]);
}
Хеширование токенов
В приведенных выше примерах токены API хранятся в вашей базе данных в виде простого текста. Если вы хотите хэшировать свои токены API с помощью хэширования SHA-256, вы можете установить hash
опцию api
конфигурации вашей защиты на true
. api
Охрана определяется в вашем файле конфигурации:config/auth.php
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => true,
],
Генерация хэшированных токенов
При использовании хешированных токенов API вы не должны генерировать свои токены API во время регистрации пользователя. Вместо этого вам потребуется реализовать собственную страницу управления токенами API в вашем приложении. Эта страница должна позволять пользователям инициализировать и обновлять свой токен API. Когда пользователь делает запрос на инициализацию или обновление своего токена, вы должны сохранить хешированную копию токена в базе данных и вернуть однократную текстовую копию токена клиенту представления / внешнего интерфейса для одноразового отображения.
Например, метод контроллера, который инициализирует / обновляет токен для данного пользователя и возвращает токен в виде простого текста в виде ответа JSON, может выглядеть следующим образом:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
class ApiTokenController extends Controller
{
/**
* Update the authenticated user's API token.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function update(Request $request)
{
$token = Str::random(60);
$request->user()->forceFill([
'api_token' => hash('sha256', $token),
])->save();
return ['token' => $token];
}
}
Поскольку токены API в приведенном выше примере имеют достаточную энтропию, нецелесообразно создавать «радужные таблицы» для поиска исходного значения хешированного токена. Поэтому медленные методы хеширования, такие как
bcrypt
ненужные.
Защита маршрутов
Laravel включает защиту аутентификации , которая автоматически проверяет токены API на входящих запросах. Вам нужно только указать промежуточное ПО на любом маршруте, для которого требуется действительный токен доступа:auth:api
use Illuminate\Http\Request;
Route::middleware('auth:api')->get('/user', function(Request $request) {
return $request->user();
});
Передача токенов в запросах
Существует несколько способов передачи токена API в ваше приложение. Мы обсудим каждый из этих подходов при использовании библиотеки Guzzle HTTP, чтобы продемонстрировать их использование. Вы можете выбрать любой из этих подходов в зависимости от потребностей вашего приложения.
Строка запроса
Потребители API вашего приложения могут указать свой токен в качестве api_token
значения строки запроса:
$response = $client->request('GET', '/api/user?api_token='.$token);
Запросить полезную нагрузку
Потребители API вашего приложения могут включить свой токен API в параметры формы запроса в виде api_token
:
$response = $client->request('POST', '/api/user', [
'headers' => [
'Accept' => 'application/json',
],
'form_params' => [
'api_token' => $token,
],
]);
Жетон на предъявителя
Потребители API вашего приложения могут предоставить свой токен API в качестве Bearer
токена в Authorization
заголовке запроса:
$response = $client->request('POST', '/api/user', [
'headers' => [
'Authorization' => 'Bearer '.$token,
'Accept' => 'application/json',
],
]);
0 комментариев