Laravel Bastion — це пакет для аутентифікації API, натхненний Stripe, розроблений Стівом МакДугаллом. Він пропонує ізоляцію середовища, гранульовані області доступу, вбудовану безпеку та багато іншого.
Після встановлення пакету, додайте HasBastionTokens трейт до вашої моделі User:
use JustSteveKing\Bastion\Concerns\HasBastionTokens;
class User extends Authenticatable
{
use HasBastionTokens;
// ...
}
Для генерації токена скористайтеся:
use JustSteveKing\Bastion\Enums\TokenEnvironment;
use JustSteveKing\Bastion\Enums\TokenType;
$result = $user->createBastionToken(
name: 'LN API Key',
scopes: ['posts:read', 'posts:write'],
environment: TokenEnvironment::Test,
type: TokenType::Restricted,
);
$token = $result['plainTextToken'];
// Приклад: app_test_rk_a8Kx7mN2pQ4vW9yB1cD3eF5gH6jK8lM
echo "Token: " . $token;
Для захисту ваших маршрутів Bastion надає middleware AuthenticateToken:
use JustSteveKing\Bastion\Http\Middleware\AuthenticateToken;
Route::middleware(AuthenticateToken::class)->group(function () {
Route::get('/api/posts', [PostController::class, 'index']);
});
При надсиланні запитів до захищених кінцевих точок передавайте токен у заголовку Authorization за схемою Bearer:
use GuzzleHttp\Client;
$client = new Client(['base_uri' => 'https://example.com/api']);
$token = 'YOUR_BEARER_TOKEN';
$response = $client->request('GET', '/posts', [
'headers' => [
'Authorization' => 'Bearer ' . $token,
'Accept' => 'application/json',
],
]);
Якщо вам потрібно також оновити токени, Bastion має цю можливість. Використовуйте метод rotate():
$result = $token->rotate();
Є навіть можливість використовувати CLI:
php artisan bastion:rotate {token-id}
Говорячи про CLI, Bastion дозволяє управляти токенами за допомогою різних команд Artisan:
# Генерація токенів
php artisan bastion:generate {user-id} "LN App Token" \
--environment=test \
--type=restricted \
--scopes=posts:read --scopes=posts:write
# Відкликання токенів
php artisan bastion:revoke {token-id} --reason="Token no longer used"
# Очищення прострочених токенів
php artisan bastion:prune-tokens --expired
# та інше...
Стів підготував зручний пакет з гарним набором функцій. Щоб дізнатися більше про Bastion, його можливості і переглянути вихідний код, відвідайте репозиторій на GitHub