Freigeben über


Gewusst wie: Erstellen eines Benutzers für einen Anwendungsprinzipal

Letzte Änderung: Donnerstag, 18. November 2010

Gilt für: SharePoint Foundation 2010

In diesem Thema wird beschrieben, wie Sie einen Anwendungsprinzipal erstellen: ein SPUser-Objekt, das eine SharePoint-fremde Anwendung darstellt, die auf Microsoft SharePoint Foundation-Daten zugreift.

Aus Sicherheitsgründen ist es Administratoren nicht möglich, Anwendungsprinzipale in der SharePoint Foundation-Benutzeroberfläche hinzuzufügen. Anwendungsprinzipale können nur mit Code erstellt werden. Dieser befindet sich typischerweise in einer kleinen Konsolenanwendung. Er könnte aber auch in einem benutzerdefinierten PowerShell-Cmdlet, in einem Windows PowerShell-Skript für eine Befehlszeilenschnittstelle, das das Add-Type-Cmdlet verwendet, oder in einem beliebigen anderen ausführbaren Kontext enthalten sein.

HinweisHinweis

Der Vorgang, ein Benutzerkonto in ein Anwendungsprinzipal umzuwandeln, kann nicht rückgängig gemacht werden. Die SPUser.IsApplicationPrincipal-Eigenschaft ist schreibgeschützt. Grund dafür ist, dass Anwendungsprinzipale nur für das Silverlight-Modell für domänenübergreifenden Datenzugriff (Cross-Domain Data Access) verwendet werden sollten, um einem Server eines Drittanbieters den Zugriff auf SharePoint-Daten zu ermöglichen, wenn ein anderer Benutzer angemeldet ist und eine Seite geöffnet hat, die ein Silverlight-Webpart hostet, das wiederum eine Silverlight-Anwendung auf dem Server des Drittanbieters hostet. Wenn Anwendungsprinzipale in reguläre Benutzer umgewandelt werden könnten, könnte ein solcher Benutzer versehentlich Vollzugriff auf SharePoint-Daten erlangen, ohne dass eine Person zuerst zur Seite navigieren muss.

Der Code muss im Kontext eines Administrators der übergeordneten Websitesammlung der Website ausgeführt werden, der der Anwendungsprinzipal hinzugefügt wird.

So erstellen Sie einen Anwendungsprinzipal

  1. Fügen Sie dem C#-Projekt Verweise auf Microsoft.SharePoint.dll und eine using-Anweisung für Microsoft.SharePoint hinzu.

  2. Rufen Sie einen Verweis auf die Website ab, der der Anwendungsprinzipalbenutzer hinzugefügt wird. Der folgende Code ist ein Beispiel dafür.

    SPSite site = new SPSite("https://localhost");
    SPWeb web = site.RootWeb;
    
    Dim site As New SPSite("https://localhost")
    Dim web As SPWeb = site.RootWeb
    
  3. Erstellen Sie das Benutzerobjekt mit einem Aufruf von AddApplicationPrincipal(String, Boolean, Boolean). Im aktuellen Beispiel wird dem Benutzer ein Anmeldename gegeben, der einen Hinweis darauf enthält, dass er einen externen Server darstellt, auf dem eine oder mehrere externe Anwendungen installiert sind. Die beiden Boolean-Parameter legen die AllowBrowseUserInfo- bzw. die RequireRequestToken-Eigenschaft des Benutzers jeweils auf den empfohlenen Wert fest. Dadurch wird Folgendes sichergestellt:

    • Die Anwendung kann nicht auf Benutzerinformationen zugreifen, auch wenn die ihr zugeordneten Berechtigungen diesen Zugriff normalerweise zulassen würden.

    • Die Anwendung kann überhaupt nicht auf die SharePoint Foundation-Webanwendung zugreifen, es sei denn, sie wird in einem Webpart auf einer Seite gehostet, zu der ein echter Benutzer navigiert hat. Die effektiven Berechtigungen der Anwendung sind die Schnittmenge der ihr selbst zugewiesenen Berechtigungen und der Berechtigungen des echten Benutzers.

    SPUser principal = web.AddApplicationPrincipal("ContosoAppServer", false, true);
    
    Dim principal As SPUser = web.AddApplicationPrincipal("ContosoAppServer", False, True)
    
    Wichtiger HinweisWichtig

    Der an AddApplicationPrincipal(String, Boolean, Boolean) übergebene Anmeldename, in diesem Fall "ContosoAppServer", muss von einem Benutzer stammen, der im Authentifizierungssystem bereits bekannt ist (z. B. von einem Benutzer, der in Active Directory-Domänendienste bereits vorhanden ist), aber noch kein Benutzer auf der Website ist.

  4. Weisen Sie den Anwendungsprinzipal einer Berechtigungsstufe zu. In diesem Beispiel wird der Anwendungsprinzipal als Mitwirkender festgelegt.

    SPRoleDefinitionBindingCollection roleDefBindCol = new SPRoleDefinitionBindingCollection();
    roleDefBindCol.Add(web.RoleDefinitions.GetByType(SPRoleType.Contributor));
    
    SPRoleAssignment roleAssign = new SPRoleAssignment(principal);
    roleAssign.ImportRoleDefinitionBindings(roleDefBindCol);
    
    web.RoleAssignments.Add(roleAssign);
    
    Dim roleDefBindCol As New SPRoleDefinitionBindingCollection()
    roleDefBindCol.Add(web.RoleDefinitions.GetByType(SPRoleType.Contributor))
    
    Dim roleAssign As New SPRoleAssignment(principal)
    roleAssign.ImportRoleDefinitionBindings(roleDefBindCol)
    
    web.RoleAssignments.Add(roleAssign)