Compartir a través de


Privilegios elevados y solo de aplicación en el modelo de complemento de SharePoint

En el nuevo modelo de complementos de SharePoint, el método usado para elevar privilegios en el código es distinto del de código de plena confianza. En un escenario típico de solución de granja de servidores o código de plena confianza (FTC), la API de RunWithElevatedPrivileges se usa con el código del modelo de objetos del lado servidor de SharePoint y se implementa mediante soluciones de granja de servidores.

En un escenario de modelo de complemento de SharePoint, el permiso AllowAppOnlyPolicy o una cuenta de servicio se usa para permitir al usuario actual ejecutar operaciones para las que no está autorizado.

Directrices importantes

Como regla general, nos gustaría proporcionar las siguientes directrices generales para elevar privilegios en el código.

  • AllowAppOnlyPolicy no funciona con

    • Búsqueda: si el destino es SharePoint local. Se ha agregado la compatibilidad con SharePoint Online se (entrada de blog)

    • Las operaciones de CSOM de perfil de usuario, excepto que la API de actualización masiva de perfiles de usuario puede usarse con permisos solo para la aplicación

    • Actualizar entradas de servicio de taxonomía (escritura): lectura funciona

      Nota:

      En estos casos, debe usar una cuenta de servicio específico.

  • AllowAppOnlyPolicy y RunWithElevatedPrivileges son parecidas, pero no exactamente iguales.

    • AllowAppOnlyPolicy ejecuta el código en función de los permisos concedidos al complemento de SharePoint, no en nombre de otro usuario con los permisos adecuados para realizar una operación.

Este es un ejemplo de cómo se devuelve un token de directiva de solo aplicación y cómo se usa para crear un objeto de contexto.

Uri siteUrl = new Uri(ConfigurationManager.AppSettings["MySiteUrl"]);
try
  {
    //Connect to the give site using App Only token
    string realm = TokenHelper.GetRealmFromTargetUrl(siteUrl);
    var token = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, siteUrl.Authority, realm).AccessToken;

    using (var ctx = TokenHelper.GetClientContextWithAccessToken(siteUrl.ToString(), token))
    {
      // Perform operations using the app only token access.
    }
  }
  catch (Exception ex)
  {
    Console.WriteLine("Error in execution: " + ex.Message);
  }
  • Al usar la AllowAppOnlyPolicy, tenga en cuenta que solo funciona en complementos de SharePoint hospedados por el proveedor.

  • AllowAppOnlyPolicy no ejecuta código en nombre de un usuario y, por tanto, puede no ser apropiada en todos los escenarios.

  • Las cuentas de servicio se definen en SharePoint.

    • En un espacio empresarial de Office 365, según qué funciones tengan los requisitos de código, es posible que las cuentas de servicio necesiten tener asignada una licencia de Office 365.

    • Puede crear cuentas de servicio por cada complemento de SharePoint o usar una única cuenta para todos los complementos de SharePoint.

    • Ponga nombres claros y descriptivos a las cuentas de servicio para poder controlar fácilmente las operaciones que realizan.

      Por ejemplo, si el complemento de SharePoint modifica los elementos de una lista, la columna Modificado por para los elementos de la lista mostrará el nombre de la cuenta de servicio asociada con el complemento de SharePoint.

  • Cuando se autentique con cuentas de servicio, deberá recuperar un nombre de usuario y contraseña de la cuenta de servicio.

    • El fragmento de código siguiente muestra cómo utilizar un nombre de usuario y contraseña para autenticarse.

    • Asegúrese de guardar y recuperar el nombre de usuario y la contraseña de forma segura.

      using (ClientContext context = new ClientContext("https://tenancy.sharepoint.com"))
      {
      
        // Use default authentication mode
        context.AuthenticationMode = ClientAuthenticationMode.Default;
        // Specify the credentials for the account that will execute the request
        context.Credentials = new SharePointOnlineCredentials("User Name", "Password");
      }
      

Opciones para elevar permisos

Tiene varias opciones para elevar permisos.

  • OAuth (AllowAppOnlyPolicy)
    • S2S (subopción)
    • ACS (subopción)
  • Cuenta de servicio
    • Código hospedado de forma remota (ejemplo: WebJob de Azure)

Importante

Con Azure ACS (Access Control Services) para SharePoint Online se ha retirado a partir del 27 de noviembre de 2023, consulte el anuncio de retirada completa para obtener más información. El uso de Azure ACS fuera del contexto de SharePoint ya se retiró el 7 de noviembre de 2018 y ya ha finalizado su vida útil.

La retirada significa que la característica no obtendrá inversiones nuevas, pero todavía se admite. El final del ciclo de vida significa que la característica se interrumpirá y ya no estará disponible para su uso.

OAuth (AllowAppOnlyPolicy)

En esta opción, la AllowAppOnlyPolicy se establece en true en el elemento AppPermissionRequests y los permisos están configurados en el manifiesto del complemento de SharePoint. OAuth se usa para devolver tokens de acceso para permitir al complemento de SharePoint ejecutar operaciones tiene permisos para realizar.

Subopción S2S

La subopción S2S solo funciona en entornos de SharePoint local.

Cuando se autentica a través de OAuth en un escenario de S2S, el método TokenHelper::GetS2SAccessTokenWithWindowsIdentity se usa para devolver el token de acceso para el complemento de SharePoint. El token de acceso permite que el complemento de SharePoint realice operaciones que le han sido concedidas en el manifiesto del complemento de SharePoint.

Esta opción no ejecuta código en nombre de un usuario y, por tanto, puede no ser apropiada en todos los escenarios.

¿Cuándo es una buena opción?

Si necesita elevar privilegios en un escenario de SharePoint S2S, esta es una buena opción porque funciona con S2S y es muy fácil de implementar.

Introducción

El siguiente artículo explica cómo usar AllowAppOnlyPolicy con S2S.

Subopción ACS

La subopción ACS funcionan en entornos de SharePoint local y para Office 365.

Cuando se autentica a través de OAuth en un escenario de S2S, el TokenHelper::GetAppOnlyAccessTokenmethod se usa para devolver el token de acceso para el complemento de SharePoint. A continuación, el método TokenHelper::GetClientContextWithAccessToken se invoca para devolver el contexto de cliente necesario para realizar cualquier operación para la que el complemento de SharePoint tenga permisos, en función de los permisos concedidos en el manifiesto del complemento de SharePoint.

Esta opción no ejecuta código en nombre de un usuario y, por tanto, puede no ser apropiada en todos los escenarios.

¿Cuándo es una buena opción?

Si necesita elevar privilegios en un escenario de SharePoint ACS, esta es una buena opción porque funciona con ACS y es muy fácil de implementar. Esta opción es la más adecuada si tiene un entorno de SharePoint local que tenga una confianza establecida con ACS. Esta es su única opción OAuth si tiene un entorno de SharePoint para Office 365.

Introducción

El siguiente artículo explica cómo usar AllowAppOnlyPolicy con ACS.

Importante

Azure Access Control (ACS), un servicio de Azure Active Directory (Azure AD), se retirará el 7 de noviembre de 2018. La retirada de este producto no afecta al modelo de complemento de SharePoint, que usa el nombre de host https://accounts.accesscontrol.windows.net (que no est? afectado por esta retirada). Para obtener más información, vea Impacto de la retirada de Azure Access Control para Complementos de SharePoint.

Cuenta de servicio

En este modelo, la clase SharePointOnlineCredentials sirve para establecer el contexto de un usuario que ejecute código.

¿Cuándo es una buena opción?

Si necesita ejecutar código en nombre de un usuario específico (cuenta de servicio), esta es una buena opción porque realiza acciones en los permisos del usuario (cuenta de servicio) y del complemento de SharePoint.

Introducción

El siguiente artículo explica cómo la clase SharePointOnlineCredentials se usa para establecer el contexto de un usuario que ejecute código.

Se aplica a

  • Office 365 multiempresa (MT)
  • Office 365 dedicado (D) parcial
  • SharePoint 2013 local parcial

Los modelos para Office 365 dedicado y local son idénticos a las técnicas del modelo de complemento de SharePoint, pero existen algunas diferencias en las posibles tecnologías que se pueden usar.