IdentityManager не получает все претензии

У меня есть IdentityServer, настроенный только с одним клиентом гибридного потока, который устанавливает "all_claims" для AllowedScopes. На другом компьютере у меня есть приложение MVC, которое подключается к IdSvr для входа пользователя. Он также устанавливает привязку /admin для IdMgr. Я могу войти в основное приложение и в IdMgr без проблем. Также в основном приложении после входа пользователя в систему я получаю все претензии, как и ожидалось, но не в IdMgr.

Я пытаюсь добавить пользовательскую логику в IdMgr на основе утверждений. Но когда я получаю Thread.CurrentPrincipal в любом контроллере IdMgr, он пуст! Все, что я получаю, — это объект ClaimsPrincipal, содержащий только утверждения ролей. Он также имеет один объект ClaimsIdentity со следующими свойствами:

AuthenticationType: "Bearer"
IsAuthenticated: true
NameClaimType: "name"
RoleClaimType: "role"

а все остальное ноль. Для пользователя нет даже имени или идентификатора. Почему это так и как я могу получить все претензии в IdentityManager?

Чтобы воспроизвести это, просто проверьте System.Threading.Thread.CurrentPrincipal в методе GetUsersAsync в UsersController.

Ссылка на эту проблему на GitHub




Ответы (2)


Попробуйте IncludeAllClaimsForUser = true в области диспетчера удостоверений.

            new Scope{
                Name = IdentityManager.Constants.IdMgrScope,
                DisplayName = "IdentityManager",
                Description = "Authorization for IdentityManager",
                Type = ScopeType.Identity,
                IncludeAllClaimsForUser = true
person rawel    schedule 26.03.2016
comment
Должен ли я поместить это в код на стороне клиента (IdMgr) или в IdSvr? Единственное место, которое я вижу в IdMgr, которое устанавливает область, — это this, в котором областью является только строка. - person orad; 29.03.2016
comment
Это должно быть настроено в конфигурации Idsrv Scope. Извините, но похоже, что он не ответит на ваш вопрос. как прокомментировал Брок выше, в принципале присутствуют только заявления о роли и имени. Сначала мне показалось, что это решило проблему пустого текущего принципала. Но я мог что-то еще упустить. - person rawel; 29.03.2016

Если вам нужны настраиваемые утверждения для IdMgr, я предлагаю вам выполнить преобразование утверждений в конвейере.

person Brock Allen    schedule 25.03.2016
comment
Да, но ClaimsPrincipal, которое я получаю в любом методе действия IdMgr, не включает настраиваемые утверждения пользователя, которые необходимо преобразовать. Похоже, IdMgr перезаписывает Thread.CurrentPrincipal отфильтрованным объектом. - person orad; 26.03.2016
comment
IdMgr принимает только заявки на имя и роль от внешнего IDP. - person Brock Allen; 26.03.2016