Безопасен ли этот Auth Flow? - PullRequest
0 голосов
/ 23 февраля 2020

Я разрабатываю API. Он предназначен для потребления только что созданными нами SPA.

Однако я два дня читал о том, как я должен реализовывать поток кода авторизации Oauth2.0. И кажется, что он предназначен для использования в сценарии ios, где вы хотите предоставить сторонним клиентам доступ к некоторым пользовательским ресурсам.

Меня это не интересует.

Достаточно ли хорош этот поток для моих целей?

  1. Клиент (SPA) отправляет запрос / вход в систему с учетными данными пользователя в теле.
  2. Сервер отвечает с помощью токен JWT, если учетные данные верны.
  3. Клиент (SPA) хранит в локальном хранилище токен, и теперь он включает токен в заголовок авторизации.

Чем больше я читаю об этом, тем более я потерян.

1 Ответ

1 голос
/ 24 февраля 2020

Если API является бэкэндом для ваших SPA, самый простой способ - использовать поток кода аутентификации с вашим бэкэндом в качестве клиента OAuth2. Бэкэнд инициирует запрос авторизации, получает код авторизации, обменивает его на токены. Затем сервер может создать сеанс со всей доступной информацией об аутентификации и авторизации. SPA получит повара ie, идентифицирующего сеанс. Существует хороший документ OAuth 2.0 для приложений на основе браузера , в котором описываются лучшие практики.

Если вам нужен бэкэнд без сохранения состояния, вы можете использовать поток кода аутентификации в ваших SPA. Вы просто используете PKCE вместо секрета клиента. Затем вы можете использовать токен доступа в качестве авторизации для вашего API. Обновление токена доступа может быть выполнено либо с помощью токенов refre sh, либо с помощью запроса авторизации с &prompt=none. Для получения дополнительной информации см. эту статью .

Если вы создадите собственную конечную точку /login, принимающую учетные данные пользователя и проверяющую их на своем сервере OAuth2, вы потеряете некоторые преимущества - ваши приложения (SPA и серверная часть) будет работать с конфиденциальными данными (учетными данными), что может быть проблемой безопасности. И вы не сможете использовать функцию единого входа (SSO) сервера OAuth2.

...