Чтобы добавить аутентификацию ADFS 3.0 в наш SPA, мы используем образец javascript и один (wsfed) внешний поставщик удостоверений, а также добавьте локальный API для клиента SPA
Мы также добавили настраиваемое представление в процесс входа в систему, где пользователь мог «Выбрать рабочий контекст», а мы могли установить дополнительное утверждение.
Проблема: как добавить и получить эту дополнительную заявку?
Поскольку нам просто нужны некоторые утверждения от федерации ws, мы сделали очень простой callback
, в котором мы просто делаем следующее (я отвечаю на вопросы из документации)
Обработка обратного вызова и вход пользователя
- inspect the identity returned by the external provider.
- Yes, we get correct claims from wsfed
- make a decision how you want to deal with that user. This might be different based on the fact if this is a new user or a returning user. New users might need additional steps and UI before they are allowed
in.
- No additional steps required
- probably create a new internal user account that is linked to the external provider.
- No, we don't need the user, we just need the a few of the claims from wsfed, so we just return a TestUser based on the wsfed sub in
FindUserFromExternalProvider
- No, we don't need the user, we just need the a few of the claims from wsfed, so we just return a TestUser based on the wsfed sub in
- store the external claims that you want to keep.
- Do we need to store the claims, will the claims not be embedded in the jwt token, and the token simply validated?
- delete the temporary cookie
- ok
- sign-in the user
- Here we would like to show a custom ui where the user should select a "workingcontext", and we could add the "workingcontext" as an additional claim.
Предполагая, что приведенное выше верно, как мы можем на шаге 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);