Concesión de acceso mediante sharepoint App-Only

SharePoint App-Only es el modelo más antiguo, pero aún muy relevante, de configuración de entidades de seguridad de aplicaciones. Este modelo funciona para SharePoint Online y SharePoint local (edición 2013/2016/2019/suscripción) y es ideal para preparar las aplicaciones para la migración desde SharePoint local a SharePoint Online. En los pasos siguientes se muestra cómo configurar una entidad de seguridad de aplicación con permisos de control total de inquilino, pero también puede conceder permisos de lectura con este enfoque.

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.

En el caso de los nuevos inquilinos, las aplicaciones que usan un token de acceso de solo aplicación de ACS están deshabilitadas de forma predeterminada. Se recomienda usar el modelo de solo aplicación de Azure AD, que es moderno y más seguro. Pero puede cambiar el comportamiento ejecutando "set-spotenant -DisableCustomAppAuthentication $false" (necesita la versión más reciente de PowerShell del administrador de SharePoint).

Configuración de una entidad de seguridad de solo aplicación con permisos de inquilino

Nota:

El administrador de la colección de sitios no puede registrar el complemento con Azure ACS en AppRegNew.aspx de forma predeterminada a menos que lo permita explícitamente el administrador de inquilinos de SharePoint. Para obtener más información, vea Set-SPOTenant.

Vaya a un sitio del inquilino (por ejemplo, https://contoso.sharepoint.com) y llame a la página appregnew.aspx (por ejemplo, https://contoso.sharepoint.com/_layouts/15/appregnew.aspx). En esta página, haga clic en el botón Generar para generar un id. de cliente y un secreto de cliente y rellene la información restante, como se muestra en la captura de pantalla siguiente.

Creación de un nuevo secreto de & id. de cliente

Importante

Almacene la información recuperada (id. de cliente y secreto de cliente), ya que la necesitará en el paso siguiente.

El siguiente paso es conceder permisos a la entidad de seguridad recién creada. Dado que se conceden permisos con ámbito de inquilino, esta concesión solo se puede realizar a través de la página appinv.aspx del sitio de administración de inquilinos. Puede acceder a este sitio a través de https://contoso-admin.sharepoint.com/_layouts/15/appinv.aspx. Una vez cargada la página, agregue el identificador de cliente y busque la entidad de seguridad creada:

Concesión de permisos a la nueva entidad de seguridad

Para conceder permisos, deberá proporcionar el XML de permisos que describe los permisos necesarios. Dado que esta aplicación debe poder acceder a todos los sitios y también usa la búsqueda solo con la aplicación, necesita los permisos siguientes:

<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" />
</AppPermissionRequests>

Al hacer clic en Crear, se le mostrará un cuadro de diálogo de consentimiento de permisos. Presione Confiar en él para conceder los permisos:

usar appregnew.aspx

Importante

Proteja la combinación de id. de cliente y secreto creada como sería su cuenta de administrador. Con este id. de cliente o secreto, se pueden leer o actualizar todos los datos del entorno de SharePoint Online.

Con el trabajo de preparación realizado, continuaremos con el siguiente capítulo en el que se muestra cómo puede usar la entidad de seguridad de la aplicación creada a través de su identificador de cliente y su combinación de secretos.

Uso de esta entidad de seguridad con PowerShell de PnP

Si desea usar el registro de solo aplicación generado con PowerShell PnP, puede hacerlo mediante la conexión a su entorno local o en línea de SharePoint mediante:

Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/demo -ClientId [Your Client ID] -ClientSecret "[Your Client Secret]"

Nota:

PnP PowerShell es una solución de código abierto con una comunidad activa que ofrece su soporte. No hay ningún contrato de nivel de servicio para el soporte de la herramienta de código abierto de Microsoft.

Uso de esta entidad de seguridad en la aplicación mediante la biblioteca de PnP Framework

En un primer paso, agregue el paquete nuget de la biblioteca de PnP Framework: https://www.nuget.org/packages/PnP.Framework. Una vez hecho esto, puede usar la siguiente construcción de código:

string siteUrl = "https://contoso.sharepoint.com/sites/demo";
using (var cc = new AuthenticationManager().GetACSAppOnlyContext(siteUrl, "[Your Client ID]", "[Your Client Secret]"))
{
    cc.Load(cc.Web, p => p.Title);
    cc.ExecuteQuery();
    Console.WriteLine(cc.Web.Title);
};

Uso de esta entidad de seguridad en la aplicación sin usar la biblioteca de PnP Framework

Una vez creada y consentida la entidad de seguridad, puede usar el identificador y el secreto de la entidad de seguridad para solicitar un acceso. La clase TokenHelper.cs usará el identificador y el secreto del archivo de configuración de la aplicación.

using Microsoft.SharePoint.Client;
using System;

namespace AzureACSAuth
{
    class Program
    {
        static void Main(string[] args)
        {
            string siteUrl = "https://contoso.sharepoint.com/sites/demo";

            //Get the realm for the URL
            string realm = TokenHelper.GetRealmFromTargetUrl(new Uri(siteUrl));

            //Get the access token for the URL.  
            string accessToken = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, new Uri(siteUrl).Authority, realm).AccessToken;

            //Create a client context object based on the retrieved access token
            using (ClientContext cc = TokenHelper.GetClientContextWithAccessToken(siteUrl, accessToken))
            {
                cc.Load(cc.Web, p => p.Title);
                cc.ExecuteQuery();
                Console.WriteLine(cc.Web.Title);
            }
        }
    }
}

Un app.config de ejemplo tiene este aspecto:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!-- Use AppRegNew.aspx and AppInv.aspx to register client id with secret -->
    <add key="ClientId" value="[Your Client ID]" />
    <add key="ClientSecret" value="[Your Client Secret]" />
  </appSettings>
</configuration>

Nota:

Puede insertar fácilmente la clase TokenHelper.cs en el proyecto agregando el paquete nuget AppForSharePointOnlineWebToolkit a la solución.