IdentityServer4 - сохраняемый серверный параметр в потоке кода авторизации - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь внедрить Identity Provider, используя в качестве основы IdentityServer4 на ASP.Net Core с небольшими изменениями в предоставленных контекстах для обеспечения изоляции многопользовательской базы данных.Моя цель - поддержать следующие два потока:

  • Неявное предоставление
  • Предоставление кода авторизации

Я реализовал следующее поведение, которое успешно работает длянеявное предоставление:

  1. Пользователь получает доступ к приложению SPA и перенаправляется на страницу входа на сервер идентификации
  2. Пользователь вводит свои учетные данные - адрес электронной почты и пароль, т.е. user@company.com
  3. После отправки учетных данных я извлекаю имя домена и сохраняю его в файле cookie.Домен необходим в контексте http для получения строки подключения к базе данных, которая потребуется для доступа к правильной базе данных.Все контексты БД, включая PersistentGrantDbContext и ConfigurationDbContext, были изменены для использования этой настраиваемой строки подключения.
  4. Во время этого сеанса домен доступен через cookie, поэтому все операции с контекстами IdentityServer выполняются нормально, ориентируясь на базу данных, как указаноимя домена.
  5. Когда поток аутентификации / авторизации завершен, идентификатор домена добавляется в токен доступа через пользовательскую реализацию IProfileService

Проблема с потоком кода авторизации:

Из-за ограничения обнаружения домена по имени пользователя проблема заключается в том, что для потока кода авторизации, когда IdentityServer4 перенаправляет на URL обратного вызова с кодом авторизации, доменное имя, которое я ранее извлек, недольше доступны.Поэтому, когда мой клиент SPA выполняет запрос / connect / token, включая код авторизации для получения токенов доступа и id, идентификатор домена теряется, и поэтому я не могу найти соответствующую строку подключения для подключения к нужной базе данных.

Вопрос:

  1. Как я могу убедиться, что идентификатор домена доступен во время кода авторизации - обмен токенами авторизации?

  2. Есть ли какие-либопримеры как это сделать?

  3. Имеет ли смысл какой-либо из приведенных ниже подходов, и если да, то как?

    a.При возврате кода авторизации от identityserver, включите пользовательский параметр запроса, который будет включать идентификатор домена.Когда клиент отправляет код авторизации в / connect / token endpoint, включите полученный параметр в качестве параметра запроса.В этом варианте у нас есть примеры как на стороне клиента, так и на стороне сервера?

    b.Кэшируйте доменное имя, используя код авторизации, который содержится в запросе / connect / token.

    • Рекомендуется ли это?
    • Как identityserver4 может предоставить этот код авторизации?
...