В Laravel появилась встроенная поддержка passkeys через новый пакет laravel/passkeys. Решение позволяет реализовать passwordless-аутентификацию на базе WebAuthn без сторонних пакетов и сложной ручной настройки.
Passkeys позволяют входить в приложение без пароля. Вместо него используются биометрия устройства, PIN-код или аппаратный ключ безопасности. Ключ хранится локально в менеджере паролей или системе пользователя, например в iCloud Keychain, Google Password Manager или 1Password.
Установка пакета
Для начала нужно установить серверный пакет и frontend-клиент:
composer require laravel/passkeys-server
npm install @laravel/passkeysПосле установки необходимо опубликовать миграции:
php artisan vendor:publish --tag=passkeys-migrations
php artisan migrateПодключение модели User
Laravel предоставляет trait PasskeyAuthenticatable, который добавляется в модель пользователя.
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\PasskeysServer\PasskeyAuthenticatable;
class User extends Authenticatable
{
use PasskeyAuthenticatable;
}Trait добавляет необходимую логику для регистрации и проверки passkeys.
Регистрация passkey
Для регистрации ключа используется JavaScript-клиент @laravel/passkeys. Пример регистрации passkey:
import { register } from '@laravel/passkeys'
await register({
user: {
id: user.id,
name: user.email,
},
})После запуска пользователь увидит системное окно создания passkey. В зависимости от устройства это может быть Face ID, Touch ID, Windows Hello или аппаратный ключ безопасности.
Аутентификация через passkey
Для входа используется метод authenticate.
import { authenticate } from '@laravel/passkeys'
await authenticate()После успешной проверки пользователь будет авторизован без ввода пароля.
Интеграция с Fortify
Пакет поддерживает интеграцию с Laravel Fortify. Пример маршрута для входа:
Route::post('/login/passkey', function () {
return response()->json([
'status' => 'authenticated',
]);
});Laravel автоматически обрабатывает WebAuthn challenge и верификацию ключей.
Поддержка Livewire, Blade и Inertia
Изначально passkeys в экосистеме Laravel развивались через пакет Spatie laravel-passkeys, который поддерживал Livewire и Blade-компоненты. Позже Laravel добавил собственную реализацию.
Spatie также поддерживает использование с Inertia, React и Vue через собственные action-классы.
Пример кнопки входа
Пример Blade-шаблона:
<button id="passkey-login">
Login with Passkey
</button>
<script type="module">
import { authenticate } from '@laravel/passkeys'
document
.getElementById('passkey-login')
.addEventListener('click', async () => {
await authenticate()
})
</script>Поддержка аппаратных ключей
Passkeys работают не только с биометрией устройств, но и с физическими ключами безопасности, включая YubiKey. Поддержка зависит от браузера и платформы пользователя.
WebAuthn и безопасность
Passkeys построены на стандарте WebAuthn и считаются устойчивыми к фишингу, поскольку пароль не передается серверу и не вводится вручную. Исследователи отмечают рост внедрения passkeys среди популярных сервисов и платформ.