Differenzieren zwischen Windows-Auth und Forms Auth Benutzer, wenn die Authentifizierung gegenüber gleichen AD mit Sharepoint 2010 Ansprüche basierte Authentifizierung verwenden

StackOverflow https://stackoverflow.com/questions/2255836

Frage

Zur Zeit arbeite ich auf eine Sharepoint 2010-Projekt, wo die Umwelt ist Setup mit einer Sharepoint-Webanwendung Ansprüche basierte Authentifizierung verwenden. Der Web-App wird auf Port erstellt 8081 den Windows-Authentifizierung für Auth und erweiterte auf Port 80 mit formularbasierte Authentifizierung.

Der Formularauthentifizierungsanbieter ist Setup das gleiche aktive Verzeichnis wie die Windows-Auth-basierte Website zu verwenden, die folgenden Einträge in der Datei web.config der Anwendung (die Einträge in den zentralen Verwaltung und Sicherheits-Token Service web.config-Dateien sowie ):

    <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>

Mit diesem Aufbau ist wie erwartet funktioniert; Benutzer, die die Anwendung auf Port 8081 Besuch mit einem Standard-Windows-Auth Herausforderung präsentiert werden, die auf Port 80 an das benutzerdefinierten Login-Formular gerichtet. Wenn Benutzer auf die Website über die aus den Box-Verwaltungstool hinzufügen, eine Suche nach einem bestimmten Benutzer wie john.smith@mydomain.com wird zwei Treffer zurückkehren, eine vom Provider Auth Fensters, ein vom Provider Auth Formen. Hinzufügen von beiden dieser Nutzer auf eine Website zeigt, dass Sharepoint speichert die Kontonamen mit einer Kennung an die Vorderseite angehängt. Der Windows-Auth Benutzer i übersetzt: 0 # .w | mydomain \ MaxMustermann wird der FBA Benutzer i übersetzt. 0 # .f- | fba_ad_mp | john.smith@mydomain.com

Hier ist, wo das Problem kommt Wir Websitesammlungen in der Masse sind die Schaffung eines speziell angefertigten Werkzeug, das eine Tabelle von Eingabe analysiert, erstellt Websitesammlungen, und fügt die entsprechenden Benutzer auf die neu erstellte Website der folgenden Methode:.

    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()));
        }
    }

Der Username Paramter übergeben ist, nach dem Beispiel, john.smith@mydomain.com. der Benutzer jedoch auf der Website hinzugefügt ist immer der Windows-Auth basierten Benutzer, i:. 0 # .w | mydomain \ MaxMustermann

Wie gebe ich die Authentifizierungs-Provider Umfrage, wenn EnsureUser Aufruf so ich, dass der richtige Benutzer auf die Website hinzugefügt wird, garantieren kann?

War es hilfreich?

Lösung

Das Problem ist, dass beiden Mitgliedschaftsanbieter die E-Mail-Adresse zu erkennen, und das erste Ergebnis (AD) verwendet wird. Versuchen Sie FBA_AD_MP. John.smith@mydomain.com - das Syntax funktioniert in den Standard-Benutzername Kontrollen (mit Scheck Namen statt dem Suchdialog), und ich glaube, EnsureUser die gleiche Art und Weise funktioniert

Andere Tipps

Kurz gesagt müssen Sie SPUser zu einem SPClaim mit dem SPClaimProviderManager

konvertieren
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top