ID4 ADFS 3.0 и клиент oid c (vue spa) - реализация обратного вызова - PullRequest
0 голосов
/ 07 апреля 2020

Чтобы добавить аутентификацию ADFS 3.0 в нашем SPA, мы используем javascript образец и один (wsfed) внешний идентификатор , а также добавляем локальный API для клиента SPA

Мы также добавили настраиваемое представление в процесс входа в систему, где пользователь мог «Выбрать WorkingContext», и мы могли бы установить дополнительное требование.

Проблема: Как добавить и получить эту дополнительную претензию?

Поскольку нам просто нужно несколько претензий от федерации ws, мы сделали очень простой callback, в котором мы просто делаем следующее (I ' отвечая на вопросы из документов )

Обработка обратного вызова и вход в систему пользователя

  1. проверяют личность, возвращенную внешним поставщиком.
    • Да, мы получаем правильные претензии от wsfed
  2. принять решение, как вы хотите иметь дело с этим пользователем. Это может отличаться в зависимости от того, является ли это новый пользователь или возвращающийся пользователь. Новым пользователям могут потребоваться дополнительные шаги и пользовательский интерфейс, прежде чем они будут допущены.
    • Никаких дополнительных шагов не требуется
  3. , вероятно, создайте новую внутреннюю учетную запись пользователя, связанную с внешним поставщиком ,
    • Нет, нам не нужен пользователь, нам просто нужно несколько утверждений от wsfed, поэтому мы просто возвращаем TestUser на основе подпрограммы wsfed в FindUserFromExternalProvider
  4. хранить внешние заявки, которые вы хотите сохранить.
    • Нужно ли нам хранить заявки, не будут ли заявки встроены в токен jwt, и токен будет просто проверен?
  5. удалить временный файл cookie
    • ok
  6. войти в систему пользователя
    • Здесь мы хотели бы чтобы показать пользовательский интерфейс, в котором пользователь должен выбрать «рабочий контекст», и мы могли бы добавить «рабочий контекст» в качестве дополнительной заявки.

Предполагая, что вышеприведенное действительно, как мы можем на шаге 6 добавить дополнительную претензию?

await _events.RaiseAsync(new UserLoginSuccessEvent(provider, providerUserId, user.SubjectId, user.Username, true, context?.ClientId)); , похоже, не дает никаких способов добавить претензии.

Вот как мы пытаемся передать дополнительные претензии через процесс входа в систему:

    var isuser = new IdentityServerUser(user.SubjectId)
            {
                DisplayName = user.Username,
                IdentityProvider = provider,
                AdditionalClaims = additionalLocalClaims
            };


            await HttpContext.SignInAsync(isuser, localSignInProps);

1 Ответ

0 голосов
/ 14 апреля 2020

Нам просто нужно реализовать IProfileService, вот и все.

...