Laravel получил встроенную поддержку Passkeys

В 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 среди популярных сервисов и платформ.

Комментарии (0)

Войдите, чтобы оставить комментарий

Похожие статьи

Laravel-Zipstream: потоковая генерация ZIP-архивов без нагрузки на сервер

Обзор пакета laravel-zipstream для потоковой генерации ZIP-архивов в Laravel. Разбираем, как работает стриминг, его преимущества и когда его стоит использовать.

Простой способ работать с конкурентностью и параллелизмом в Python

Объяснение, как с помощью стандартных средств Python (concurrent.futures) легко решать задачи конкурентности и параллелизма. Приведены практические примеры использования пулов потоков и процессов.