При использовании настраиваемого поставщика утверждений в SharePoint 2010 в средстве выбора людей не отображается выбранное имя

Дата публикации исходной статьи: вторник, 28 июня 2011 г.

Недавно я столкнулся с проблемой, которую оказалось довольно сложно отследить, поэтому я решил поделиться информацией об этой проблеме и ее решении.  В данном случае был разработан настраиваемый поставщик утверждений, который использовался в качестве поставщика утверждений по умолчанию для SPTrustedIdentityTokenIssuer, как описано в следующей статье:  http://blogs.technet.com/b/speschka/archive/2010/04/28/how-to-override-the-default-name-resolution-and-claims-provider-in-sharepoint-2010.aspx.  В отдельных случаях он кажется рабочим — вы выполняете поиск, он отображает список совпадений, вы выбираете одно из них и нажимаете кнопку "OK".  Иногда все работает хорошо — диалоговое окно закрывается и вы видите в поле ввода элемента управления разрешенное имя.  Кроме того, вы можете задать точку останова в методе FillResolve и пройти через нее.

Однако в некоторых случаях наблюдается следующее поведение:

  • Окно средства выбора людей закрывается
  • Поле ввода элемента управления пусто — не отображается ничего(независимо от того, было ли разрешено имя)
  • Если задать точку останова в методе FillResolve, она никогда не достигается
  • В журналах ULS не зарегистрированы ошибки

В данном случае я в конце концов определил, что настраиваемый поставщик утверждений добавлял тип утверждения, который не имел соответствующего сопоставления в SPTrustedIdentityTokenIssuer.  Например, он создавал утверждение с типом http://schemas.steve.com/foo, а в списке сопоставлений утверждений для SPTrustedIdentityTokenIssuer не было сопоставления для http://schemas.steve.com/foo (пример сопоставлений утверждений и сведения об их создании см. в статье http://blogs.technet.com/b/speschka/archive/2010/02/17/creating-both-an-identity-and-role-claim-for-a-sharepoint-2010-claims-auth-application.aspx).  Таким образом, вместо добавления утверждения, которое SharePoint не может сопоставить, поставщик просто теряет его где-то в конвейере обработки и выдает пустой экран без каких-либо сообщений об ошибках.  Вот почему отслеживание этой проблемы может занять так много времени.

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

Это локализованная запись блога. Исходная статья доступна по адресу Name Disappears After Selecting in People Picker with Custom Claims Provider in SharePoint 2010