ID4 ADFS 3.0 и oidc-client (vue spa) - реализация обратного вызова

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

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

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

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

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

  1. inspect the identity returned by the external provider.
    • Yes, we get correct claims from wsfed
  2. 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
  3. 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
  4. 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?
  5. delete the temporary cookie
    • ok
  6. 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);

person Larsi    schedule 07.04.2020    source источник


Ответы (1)


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

person Larsi    schedule 14.04.2020