Чтобы добавить аутентификацию ADFS 3.0 в нашем SPA, мы используем javascript образец и один (wsfed) внешний идентификатор , а также добавляем локальный API для клиента SPA
Мы также добавили настраиваемое представление в процесс входа в систему, где пользователь мог «Выбрать WorkingContext», и мы могли бы установить дополнительное требование.
Проблема: Как добавить и получить эту дополнительную претензию?
Поскольку нам просто нужно несколько претензий от федерации ws, мы сделали очень простой callback
, в котором мы просто делаем следующее (I ' отвечая на вопросы из документов )
Обработка обратного вызова и вход в систему пользователя
- проверяют личность, возвращенную внешним поставщиком.
- Да, мы получаем правильные претензии от wsfed
- принять решение, как вы хотите иметь дело с этим пользователем. Это может отличаться в зависимости от того, является ли это новый пользователь или возвращающийся пользователь. Новым пользователям могут потребоваться дополнительные шаги и пользовательский интерфейс, прежде чем они будут допущены.
- Никаких дополнительных шагов не требуется
- , вероятно, создайте новую внутреннюю учетную запись пользователя, связанную с внешним поставщиком ,
- Нет, нам не нужен пользователь, нам просто нужно несколько утверждений от wsfed, поэтому мы просто возвращаем TestUser на основе подпрограммы wsfed в
FindUserFromExternalProvider
- хранить внешние заявки, которые вы хотите сохранить.
- Нужно ли нам хранить заявки, не будут ли заявки встроены в токен jwt, и токен будет просто проверен?
- удалить временный файл cookie
- войти в систему пользователя
- Здесь мы хотели бы чтобы показать пользовательский интерфейс, в котором пользователь должен выбрать «рабочий контекст», и мы могли бы добавить «рабочий контекст» в качестве дополнительной заявки.
Предполагая, что вышеприведенное действительно, как мы можем на шаге 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);