Laravel Bastion — це пакет для аутентифікації API, натхненний Stripe, розроблений Стівом МакДугаллом. Він пропонує ізоляцію середовища, гранульовані області доступу, вбудовану безпеку та багато іншого.
# Особливості
- Токени API у стилі Stripe — токени з префіксами, що вказують на середовище (app_test_pk_, app_live_sk_)
- Ізоляція середовища — окремі тестові та живі середовища з автоматичною валідацією
- Гранульовані області доступу — детальний контроль дозволів з підтримкою шаблонів
- Типи токенів — публічні, секретні та обмежені ключі з різними рівнями доступу
- Аудиторське логування — всебічний облік активності для дотримання вимог і налагодження
- Підтримка вебхуків — вбудовані кінцеві точки вебхуків з перевіркою підписів
- Безпека на першому місці — дати закінчення терміну дії та безпечне хешування токенів
- Нативність Laravel — створено з урахуванням конвенцій та кращих практик Laravel
Після встановлення пакету, додайте 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