0

Мы используем IdentityServer3 в качестве нашего централизованного поставщика проверки подлинности. Теперь у меня есть общий вопрос об IdenityServer в корпоративной среде. Я попытаюсь объяснить это в следующем примере:IdenityServer в корпоративной среде - разрешение информации пользователя в нескольких базах данных

  1. Если пользователь был успешно аутентифицирован, он получает токен у поставщика. Маркер включает уникальный идентификатор пользователя.
  2. Аутентифицированный пользователь отправляет запрос в WebApi для создания нового элемента (например, нового продукта).
  3. WebApi извлекает уникальный идентификатор из токена и создает новый продукт в базе данных. Кроме того, новый продукт был связан с уникальным идентификатором пользователя (например, как createUserId).
  4. Другой пользователь отправляет запрос в WebApi для получения всех доступных продуктов.
  5. WebApi создает запрос базы данных для извлечения всех продуктов. Кроме того, WebApi хочет преобразовать creationUserId каждого продукта в коррелирующее имя пользователя. Но это невозможно, потому что имя пользователя хранится в базе данных идентификации, которая является другой базой данных, чем база данных приложений (например, для продуктов). Есть ли какая-то передовая практика для решения этого требования?

Большое спасибо за вашу помощь!

С уважением

+2

Один из способов, о котором я могу думать, - добавить имя пользователя как одно из требований, которое будет частью id_token. В web api вы получите эту претензию, которая может быть использована для извлечения имени пользователя и использования его по своему усмотрению. –

+0

Вам понадобится служба для перевода этих идентификаторов на имена пользователей. Эта служба может быть центральной, или ваш api может иметь кэш, загруженный из службы. Другой подход может заключаться в том, что при сохранении идентификатора вы также можете поместить имя из токена, но имена курсоров могут измениться. –

ответ

0

Благодарим за ответы. Я вижу только один способ реализовать свои требования:

-> Я сохраняю имя пользователя с userId в базе данных приложения, потому что API для перевода должен замедляться.