Partager via


Procédure : créer un utilisateur principal d’application

Dernière modification : jeudi 18 novembre 2010

S’applique à : SharePoint Foundation 2010

Cette rubrique explique comment créer un principal d’application, un objet SPUser représentant une application non-SharePoint qui accède aux données Microsoft SharePoint Foundation.

Pour des raisons de sécurité, les administrateurs ne peuvent pas ajouter de principal d’application via l’interface utilisateur de SharePoint Foundation. Un principal d’application ne peut être créé que par code. En général, ce code se trouve dans une petite application console, mais il peut être inclus dans un applet de commande PowerShell personnalisé, un script d’interface de ligne de commande Windows PowerShell qui utilise l’applet de commande Add-Type, ou tout autre contexte exécutable.

Notes

Il est impossible d’annuler le processus de création d’un compte d’utilisateur dans une entité de sécurité d’application. La propriété SPUser.IsApplicationPrincipal est en lecture seule. En effet, les entités de sécurité d’application ne doivent être utilisées que pour le modèle d’accès aux données entre domaines Silverlight, afin de permettre à un serveur tiers d’accéder aux données SharePoint lorsqu’un autre utilisateur (en l’occurrence, une personne) est connecté et qu’il a ouvert une page hébergeant un composant WebPart Silverlight, lequel héberge lui-même une application Silverlight sur le serveur tiers. Si les entités de sécurité d’application sont remplacées par des utilisateurs classiques, ces derniers risquent d’obtenir involontairement un accès complet aux données SharePoint sans qu’il soit nécessaire qu’une personne consulte d’abord la page.

Le code doit s’exécuter dans le contexte d’un administrateur de la collection de sites parente du site Web auquel l’utilisateur principal d’application est ajouté.

Pour créer un principal d’application

  1. Ajoutez les références à Microsoft.SharePoint.dll dans votre projet C# et une instruction using pour Microsoft.SharePoint.

  2. Obtenez une référence au site Web auquel l’utilisateur principal d’application est ajouté. Voici un exemple :

    SPSite site = new SPSite("https://localhost");
    SPWeb web = site.RootWeb;
    
    Dim site As New SPSite("https://localhost")
    Dim web As SPWeb = site.RootWeb
    
  3. Créez l’objet utilisateur par un appel à AddApplicationPrincipal(String, Boolean, Boolean). Dans cet exemple, l’utilisateur reçoit un nom de connexion qui contient un rappel représentant un serveur externe sur lequel une ou plusieurs applications externes sont installées. Les deux paramètres Boolean définissent les propriétés AllowBrowseUserInfo et RequireRequestToken de l’utilisateur, respectivement, avec les valeurs recommandées. Cela garantit que :

    • L’application ne peut pas accéder aux informations de l’utilisateur même si les autorisations octroyées à celle-ci le lui permettraient autrement.

    • L’application ne peut pas accéder à l’application Web SharePoint Foundation, à moins qu’elle soit hébergée dans un composant WebPart sur une page vers laquelle un utilisateur réel a navigué. Les autorisations effectives de l’application sont l’intersection de ses autorisations octroyées et des autorisations de l’utilisateur réel.

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

    Important

    Le nom de connexion passé à AddApplicationPrincipal(String, Boolean, Boolean), dans ce cas « ContosoAppServer », doit être celui d’un utilisateur déjà connu du système d’authentification (par exemple, un utilisateur qui existe déjà dans les services de domaine Active Directory), mais qui n’est pas déjà utilisateur sur le site Web.

  4. Attribuez un niveau d’autorisation au principal d’application. Dans cet exemple, le principal d’application devient collaborateur.

    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)