В чем проблема использования токенов паролей для Nuxt SPA - PullRequest
0 голосов
/ 18 апреля 2020

Я хочу разработать Nuxt SPA с Laravel в качестве бэкэнда. Прочитайте паспортный документ и теперь запутались в следующем абзаце, потому что я не хочу перенаправлять пользователя на бэкэнд-страницу входа в систему:

Предоставление кода авторизации с PKCE

Предоставление кода авторизации с «Пробным ключом для обмена кодами» (PKCE) - это безопасный способ аутентификации одностраничных приложений или собственных приложений для доступа к вашему API. Этот грант следует использовать, когда вы не можете гарантировать, что секрет клиента будет храниться конфиденциально или для того, чтобы уменьшить угрозу перехвата злоумышленником кода авторизации. Комбинация «верификатор кода» и «проверка кода» заменяет секрет клиента при обмене кода авторизации на токен доступа.

В чем заключается проблема с выполнением следующего запроса в браузере клиента и сохранением токен в клиентском браузере?

http->post('http://your-app.com/oauth/token', [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'username' => 'taylor@laravel.com',
        'password' => 'my-password',
        'scope' => '',
    ],

1 Ответ

1 голос
/ 19 апреля 2020

Последняя OAuth 2.0. Наилучшая текущая практика полностью запрещает предоставление пароля.

"Предоставление учетных данных пароля владельца ресурса НЕ ДОЛЖНО использоваться . Этот тип предоставления небезопасно предоставляет учетные данные владельца ресурса клиенту. Даже если клиент доброкачественный, это приводит к увеличению поверхности атаки (учетные данные могут протекать в большем количестве мест, чем просто в AS), и пользователи обучаются вводить свои учетные данные в местах, отличных от AS.

Кроме того, адаптация учетных данных пароля владельца ресурса к двухфакторной аутентификации, аутентификации с использованием криптографических c учетных данных и процессам аутентификации, требующим нескольких шагов, может быть трудным или невозможным ( WebCrypto , WebAuthn ). "

...