Facebook oauth2 - безопасное использование после входа в систему - PullRequest
0 голосов
/ 06 декабря 2018

Я бы хотел немного спросить теоретически.

У меня есть приложение angular6 + spring, которое имеет свой собственный клиент, специфичные для приложения данные клиента.Эти данные можно разделить на две группы

  1. данные управления: как и роли клиента, которые позволяют клиенту посещать различные части приложения
  2. данные клиента: личные настройки, история действий и т. Д..

Поскольку я хотел бы сделать вход в систему как можно более удобным для пользователей, я хотел бы реализовать вход в Facebook.

После того, как пользователь нажмет "кнопку входа FB", Facebook вернет менянекоторая информация о пользователе и в основном токен безопасности.Как я могу использовать это для безопасного общения с моим BE.

Когда кто-то отправляет запрос в BE, я должен быть уверен, что это тот же человек, который вошел в Facebook.

  1. Если я отправлю этот токен как часть запроса, что мешает злоумышленнику каким-либо образом получить токен и выдать себя за оригинального пользователя?
  2. В какой форме я должен отправлять данные, полученные из Facebook, на свой собственный сервер?
  3. Как мне работать с токеном на сервере?
  4. Как проверить его подлинность?

Спасибо за ответы

Filip Širc

1 Ответ

0 голосов
/ 06 декабря 2018

Вы должны изучить использование OpenID Connect вместе с протоколом OAuth.Он позволяет вам аутентифицировать пользователя в вашем клиентском приложении (приложение Angular6 + Spring) для проверки данных пользователя.

Когда вы отправляете access token для доступа к определенному ресурсу, вам следует избегать его отправки в видепараметр запроса.Обычно рекомендуется отправлять его под заголовком авторизации запроса как bearer token.Однако, если вы хотите, чтобы он был более безопасным, вы можете закодировать токен перед отправкой, чтобы было трудно декодировать его и украсть любую ценную информацию.

Кроме того, когда вы отправляете конфиденциальную информацию, онаЛучше отправлять их в виде JSON Web Token (JWT).Вы можете использовать стороннюю библиотеку для создания JWT, чтобы включить информацию, которая должна быть отправлена ​​на сервер.Вы можете подписать JWT своей собственной подписью, которая может быть подтверждена позже.Для получения подробной информации о jwts см. https://tools.ietf.org/html/rfc7519.

Вы должны использовать утверждения в своем access token, чтобы предоставить пользователю доступ к защищаемому ресурсу.Поскольку большинство токенов отправляются в виде jwts, вы можете их декодировать и проверить необходимые утверждения, такие как области, аудитория (клиентское приложение), тема (пользователь) и т. Д.

Самое главное, выследует проверить подпись токена, отправленного из Facebook, чтобы убедиться в его подлинности.Для этого вам необходимо получить public key подробности из jwks endpoint в Facebook и проверить подпись с помощью сторонней библиотеки (auth0, nimbusds и т. Д.).Цифровая подпись Facebook будет уникальной, и этот процесс проверки является лучшим способом обеспечения безопасности.Кроме того, вы можете проверить, соответствуют ли определенные утверждения в токене ожидаемым значениям, чтобы проверить токен.Это также можно сделать с помощью библиотек, таких как упомянутые выше.Вот auth0 репо , чтобы вы могли получить общее представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...