Средство SPMigrateUsers для изменения удостоверений учетных записей в SharePoint 2010


Исходная статья опубликована 3 июня 2012 г.

Бывают ситуации, когда в SharePoint необходимо изменить удостоверение учетной записи.  Например, при использовании утверждений SAML.  На практике в качестве удостоверений утверждений я использую адреса электронной почты пользователей.  Я делаю это, так как: a) у большинства пользователей есть адреса электронной почты и b) большинство пользователей знают, что такое адрес электронной почты.  Однако при использовании адресов электронной почты необходимо учитывать, что пользователи могут изменять их.  Понятно, что при изменении адреса электронной почты все разрешения пользователя будут отменены.  Честно говоря, я считаю, что такая ситуация возникает нечасто, иначе я бы не использовал адреса электронной почты.  Тем не менее, время от времени это происходит. Итак, что делать, если все учетные записи SharePoint связаны с адресами электронной почты?

Этот вопрос я рассматривал в статье об интерфейсе IMigrateUserCallback:  http://blogs.msdn.com/b/sharepoint_ru/archive/2011/03/08/windows-saml.aspx.  В ней я описал перенос удостоверений с помощью этого интерфейса и привел пример преобразования удостоверения утверждений Windows в удостоверение утверждений SAML.  Теперь я решил написать небольшое приложение Windows, которое будет изменять вводимые учетные данные.  Вы можете просто использовать его в качестве средства для внесения таких изменений или же изменить его исходный код (который я включил в данную статью) для выполнения более сложных действий, например, для считывания списка пользователей из файла или базы данных и выполнения сравнений.

На самом деле это средство можно использовать в нескольких сценариях.  Его можно применять для преобразования не только адресов электронной почты, но и имен групп.  Кто-то может возразить, что для имен групп нужно использовать идентификаторы безопасности (т. е. утверждения роли в SAML), так как при переименовании группы ИД безопасности не изменяется.  Хоть это и верно, но: a) я считаю, что такие ситуации возникают нечасто, b) немногие вводят идентификаторы безопасности групп и добавляют их в группы SharePoint и c) идентификаторы безопасности ничего не значат за пределами локальной службы Active Directory — как только вы переходите в облачную службу типа Azure, Google, Yahoo, Facebook и т. д., идентификаторы безопасности становятся совершенно бесполезными.

Еще одно преимущество этого средства состоит в том, что оно не ограничивает изменения только одним типом поставщика.  Вы можете изменить группу Windows на утверждение роли SAML, утверждение удостоверения SAML — на авторизованного пользователя FBA, роль FBA — на группу AD. Я испробовал практически все комбинации "пользователей" и "групп" между различными поставщиками и все преобразования выполнялись успешно.

Средство довольно простое в использовании; вот его изображение:

При запуске приложение загружает список всех веб-приложений.  Каждому веб-приложению соответствуют два поля со списком, которые заполняются списком поставщиков, используемых в нем.  Если у вас есть несколько поставщиков SAML или FBA, все они будут представлены в раскрывающемся списке.  Вам нужно просто выбрать исходного и конечного поставщиков для переноса.  В разделе "Claim Value" вводится переносимое значение и направление переноса.  Введите переносимое значение в поле ввода "Plain Text Value" и нажмите кнопку утверждения удостоверения (слева) или утверждения группы (справа).  Текстовое описание дает соответствующие пояснения, а текст на кнопках изменяется в зависимости от используемого поставщика удостоверений.

Например, предположим, что вы используете только проверку подлинности SAML и хотите перенести адрес электронной почты "steve@contoso.com" в "stevep@contoso.com".  Вы должны выбрать веб-приложение, а поставщик проверки подлинности SAML будет выбран по умолчанию в каждом раскрывающемся списке.  Затем в разделе "Before Values" введите "steve@contoso.com" в поле "Plain Text Value" и нажмите кнопку "ID Claim"; в поле "Encoded Value" появится закодированное значение утверждения.  После этого введите "stevep@contoso.com" в поле "After Values Plain Text Value".  Нажмите кнопку "ID Claim"; в поле "Encoded Value" появится закодированное значение (ПРИМЕЧАНИЕ.  На предыдущем рисунке на кнопке в разделе "After Values" отображается текст "User", а не "ID Claim", так как в этом примере показан перенос утверждений SAML в утверждения Windows).  После ввода всех значений нажмите кнопку "Migrate", чтобы завершить процесс; после завершения переноса появится соответствующее сообщение.

В процессе тестирования с различными веб-приложениями и типами проверки подлинности я столкнулся с несколькими проблемами, о которых хочу упомянуть.  В одном случае я получил сообщение об ошибке "отказано в доступе" при попытке переноса пользователей для одного конкретного веб-приложения.  Я не смог обнаружить причину и думаю, что проблема в самом веб-приложении. Определить проблему мне также не удалось, так как программа работала правильно для остальных четырех или пяти веб-приложений в ферме.

В другом случае перенос завершился успешно, но я не смог выполнить вход от имени перенесенного пользователя.  Изучив эту проблему, я обнаружил, что переносимая учетная запись не прошла через функцию IMigrateUserCallback (т. е. это проблема SharePoint, а не кода программы).  Если вы столкнетесь с такой проблемой, рекомендую использовать исходный код и отладчик Visual Studio, чтобы убедиться, что переносимая учетная запись вызывается.  К сожалению, у меня был только один авторизованный пользователь FBA, который застрял в этой ловушке.

И наконец последнее: не удивляйтесь, если после переноса учетной записи из одного значения в другое и входа в качестве нового пользователя вы увидите в правом верхнем углу страницы старое имя учетной записи.  Функция переноса изменяет только имя учетной записи.  Если изменяются другие сведения о пользователе, то при обновлении профилей пользователей правильные данные должны распространиться во все семейства сайтов при следующей синхронизации с системой профилирования.

Вот и все — пользуйтесь этим приложением, надеюсь, оно будет полезным.  Как я уже говорил, к статье прилагается полный исходный код — вы можете экспериментировать с ним и изменять его в соответствии со своим сценарием.

Это локализованная запись блога. Исходная статья доступна по адресу: The SPMigrateUsers Tool for Changing Account Identities in SharePoint 2010


Skip to main content