Дифференцируйтесь между Windows Auth и пользователями Автора Форм при аутентификации против того же AD с SharePoint использования 2010 года основанной на требованиях аутентификации

Я в настоящее время работаю над проектом SharePoint 2010 года, где среда является установкой с веб-приложением SharePoint с помощью основанной на требованиях аутентификации. Веб-приложение создается на порте 8 081 аутентификация Windows использования для автора и расширяется для портирования 80 Аутентификации на основе форм использования.

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

    <membership defaultProvider="i">
  <providers>
    <add name="i" type="Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
    <add name="FBA_AD_MP" type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ADFBAConnectionString" enableSearchMethods="true" attributeMapUsername="userPrincipalName" />
  </providers>
</membership>

Используя эту установку работает как ожидалось; пользователям, которые посещают приложение на порте 8081, дарят стандартную проблему автора окон, пользователи на порте 80, направлены к пользовательской форме входа в систему. При добавлении пользователей к сайту через из административных средств поля, поиск конкретного пользователя, таких как john.smith@mydomain.com возвратит два хита, один от поставщика автора окон, один от поставщика автора форм. Добавление обоих из этих пользователей на сайт показывает, что SharePoint снабжает имя учетной записи идентификатором, добавленным к передней стороне. Пользователь автора окон переводится в i:0#.w|mydomain\johnsmith, пользователь FBA переводится в i:0#.f|fba_ad_mp|john.smith@mydomain.com.

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

    private static void AddUser(SPSite site, String userName, String spGroupName)
    {
        try
        {
            SPUser spUser = site.RootWeb.EnsureUser(userName);

            if (spUser != null)
            {
                site.RootWeb.Groups[spGroupName].AddUser(spUser);
            }
        }
        catch(Exception ex)
        {
            SharePointManager.Counter.Warnings++;
            SharePointManager.Logger.Warn(String.Format("\t\tUnable to add user {0} to group {1} at site {2}: {3}", userName, spGroupName, site.RootWeb.Url, ex.ToString()));
        }
    }

Параметр имени пользователя передал в, следуя примеру, john.smith@mydomain.com. Однако пользователь, добавленный к сайту, всегда является окнами основанный на авторе пользователь, i:0#.w|mydomain\johnsmith.

Как я указываю, какого поставщика аутентификации опросить при вызове EnsureUser, таким образом, я могу гарантировать, что корректный пользователь добавляется к сайту?

6
задан Preston Guillot 12 February 2010 в 23:44
поделиться

1 ответ

Проблема в том, что оба поставщика членства распознают адрес электронной почты, и используется первый результат (AD). Попробуйте (скрыто) - этот синтаксис работает в стандартных элементах управления именем пользователя (с использованием имени проверки, а не диалогового окна поиска), и я считаю, что EnsureUser работает таким же образом.

1
ответ дан 17 December 2019 в 22:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: