При использовании Implicit Flow со SPA, где мы на самом деле создаем учетную запись в нашей базе данных?

Я пытаюсь понять, как OAuth2.0 Implicit Flow (с OIDC) работает с довольно простым клиентом SPA/Mobile (он же Client) и моим REST Api (он же Resource Server) и создает новые учетные записи.

Я более или менее понимаю, как Клиент может запросить токен из службы аутентификации (Auth0/Stormpath/IdentityServer/etc) .. отлично. Затем он использует этот токен для доступа к конечным точкам API с ограниченным доступом. к отлично!

Но все примеры, которые я продолжаю читать, состоят в том, что "учетные записи" создаются в этих службах проверки подлинности (что является обязательным, и я полностью разбираюсь в них), но ничего не создается в моей службе (мой сервер ресурсов).

Мне нужно создать учетную запись в моей БД, потому что у меня есть пользовательские данные / настройки, которые я хочу сохранить (например, заказы, которые они делают, и т. Д.). Конечно, я НЕ хочу хранить какую-либо информацию о безопасности... потому что именно поэтому я использую внешнюю службу аутентификации.

Итак, может кто-нибудь объяснить, как они используют неявный поток и... когда токен (или, более конкретно, когда OpenID Connect используется для получения информации о пользователе) возвращается, вы выясняете, существует ли пользователь или нет, и создает его, если он новый,

Я также жалею, что токен issuer_id + sub оба необходимы для определения unique пользователь с точки зрения авторизации службы.

И наконец, как вы можете предотвратить "спам / злоупотребление в новой учетной записи"? Я предполагаю, что в какой-то момент в вашем клиенте (который проверяет токен локального хранилища перед каждым запросом Rest API, потому что нам нужно вставить некоторый токен в bearer заголовок) ... что когда вы решите создать нового пользователя... мой REST Api (он же Resource Server) будет иметь конечную точку для создания новых пользователей.. как POST /account/.. так как защитить ваш сервер от получения новых спам-сообщений, которые создают новые учетные записи? IP+ ограничение по времени?

ура!

1 ответ

Решение

где мы на самом деле создаем учетную запись в нашей базе данных?

Создайте таблицу базы данных, которая включает в себя iss а также sub колонка. Настройте эти столбцы как уникальный составной ключ, который представляет пользователя. Вставьте туда учетные записи пользователей.

Итак, может кто-нибудь объяснить, как они используют неявный поток и... когда токен (или, более конкретно, когда OpenID Connect используется для получения информации о пользователе) возвращается, вы выясняете, существует ли пользователь или нет, и создает его, если он новый?

Похоже, вы уже знаете ответ.

  1. Разобрать id_token,
  2. Получить iss а также sub,
  3. Проверьте таблицу вашего приложения для этого iss + sub ключ.
  4. Если он там, то этот пользователь существует. Если это не так, то создайте пользователя.

Из спецификации:

Идентификатор субъекта: Локально уникальный и никогда не переназначаемый идентификатор в Эмитенте для Конечного пользователя, который предназначен для использования Клиентом.

https://openid.net/specs/openid-connect-core-1_0.html

iss а также sub действовать как уникальный составной ключ, который представляет пользователя. Вот пример id_token,

{
 alg: "RS256",
 kid: "1e9gdk7"
}.
{
 iss: "http://server.example.com",
 sub: "248289761001",
 aud: "s6BhdRkqt3",
 nonce: "n-0S6_WzA2Mj",
 exp: 1311281970,
 iat: 1311280970
}.
[signature]

Лечить iss + sub составной ключ так же, как вы относитесь к любому другому уникальному идентификатору пользователя.

Итак, как защитить ваш сервер от получения новых спам-сообщений, которые создают новые учетные записи?

Настройте ограничения общего доступа к ресурсам между источниками (CORS), чтобы разрешить POST-доступ к домену только SPA. /api/account конечная точка.

Другие вопросы по тегам