При использовании 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 используется для получения информации о пользователе) возвращается, вы выясняете, существует ли пользователь или нет, и создает его, если он новый?
Похоже, вы уже знаете ответ.
- Разобрать
id_token
, - Получить
iss
а такжеsub
, - Проверьте таблицу вашего приложения для этого
iss
+sub
ключ. - Если он там, то этот пользователь существует. Если это не так, то создайте пользователя.
Из спецификации:
Идентификатор субъекта: Локально уникальный и никогда не переназначаемый идентификатор в Эмитенте для Конечного пользователя, который предназначен для использования Клиентом.
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
конечная точка.