Compartir a través de


Procedimiento para crear un usuario de entidad de seguridad de aplicación

Última modificación: jueves, 18 de noviembre de 2010

Hace referencia a: SharePoint Foundation 2010

En este tema se explica cómo crear una entidad de seguridad de aplicación; un objeto SPUser que representa una aplicación que no es de SharePoint y que tiene acceso a los datos de Microsoft SharePoint Foundation.

Por razones de seguridad, los administradores no pueden agregar entidades de seguridad de aplicación a la UI de SharePoint Foundation. Las entidades de seguridad de aplicación solo se pueden crear con código. Generalmente, el código está en una pequeña aplicación de consola, pero podría estar en un cmdlet de PowerShell personalizado, o en un script de interfaz de línea de comandos de Windows PowerShell que usa el cmdlet Add-Type o cualquier otro contexto ejecutable.

Nota

No se puede invertir el proceso de conversión de una cuenta de usuario en una entidad de seguridad de la aplicación. La propiedad SPUser.IsApplicationPrincipal es de solo lectura. Esto se debe a que las entidades de seguridad de la aplicación solo deben usarse para el modelo de acceso a datos entre dominios de Silverlight, para permitir que un servidor de otro fabricante tenga acceso a datos de SharePoint cuando otro usuario humano haya iniciado sesión y abierto una página que hospeda un elemento web de Silverlight que, a su vez, hospeda una aplicación de Silverlight en el servidor de otro fabricante. Si las entidades de seguridad de la aplicación pudieran convertirse en usuarios normales, es posible que dichos usuarios accidentalmente obtuvieran acceso total a los datos de SharePoint sin necesidad de que una persona buscara la página primero.

El código debe ejecutarse en el contexto de un administrador de la colección de sitios primaria del sitio web al que se va a agregar el usuario de entidad de seguridad de la aplicación.

Para crear una entidad de seguridad de la aplicación

  1. Agregue las referencias a Microsoft.SharePoint.dll a su proyecto C# y una instrucción using para Microsoft.SharePoint.

  2. Obtenga una referencia al sitio web al que se va a agregar el usuario de entidad de seguridad de la aplicación. A continuación se muestra un ejemplo.

    SPSite site = new SPSite("https://localhost");
    SPWeb web = site.RootWeb;
    
    Dim site As New SPSite("https://localhost")
    Dim web As SPWeb = site.RootWeb
    
  3. Cree el objeto de usuario con una llamada a AddApplicationPrincipal(String, Boolean, Boolean). En este ejemplo, se da al usuario un nombre de inicio de sesión que contiene un recordatorio de que representa un servidor externo en el cual están instaladas una o más aplicaciones externas. Los dos parámetros Boolean establecen las propiedades AllowBrowseUserInfo y RequireRequestToken del usuario, respectivamente, en sus valores recomendados. Esto garantiza que:

    • La aplicación no puede obtener acceso a la información del usuario, aún cuando los permisos asignados le hubieran permitido tener acceso a dicha información.

    • La aplicación no puede tener acceso a la aplicación web de SharePoint Foundation a menos que esté hospedada en un elemento web en una página a la que haya navegado un usuario real. Los permisos efectivos de la aplicación son la intersección de sus propios permisos asignados y los permisos del usuario real.

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

    El nombre de inicio de sesión pasó a AddApplicationPrincipal(String, Boolean, Boolean), en este caso ‘ContosoAppServer’ debe ser de un usuario que el sistema de autenticación ya conozca (por ejemplo, un usuario que ya existe en Servicios de dominio de Active Directory), pero que aún no sea un usuario del sitio web.

  4. Asigne la entidad de seguridad de la aplicación en un nivel de permisos. En este ejemplo, se asignó la entidad de seguridad de la aplicación como colaborador.

    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)