Configurar la aplicación de Azure para acceso de SharePoint

El uso de la entidad Documentos de SharePoint en una organización Dynamics 365 fuera de la cuadrícula de documentos en una aplicación Dynamics 365 Customer Engagement (on-premises) requiere una aplicación Azure para conceder acceso. Un ejemplo de este acceso incluye el uso dentro de llamadas a la API de Dynamics 365 Customer Engagement. La instalación usa las Identidades Administradas de Power Platform con Azure para conceder acceso.

Importante

A partir de marzo de 2025, se elimina el acceso actual para mejorar la protección del sistema. Para garantizar el acceso continuado, siga estos pasos para crear una aplicación Azure con los permisos necesarios SharePoint, configurar identidades administradas en su organización de Dynamics 365 Customer Engagement (on-premises) y configurar credenciales federadas.

Crear una aplicación de Azure con permisos SharePoint

Cree un registro de la aplicación con permiso API a SharePoint. Obtenga más información sobre cómo registrar una aplicación y acceder a SharePoint en Inicio rápido de registro de aplicación de Azure y Acceso a SharePoint mediante solo la aplicación Azure AD.

  1. Abra el Azure Portal.

  2. En Servicios Azure, seleccione Registros de aplicaciones.

  3. Seleccione Nuevo registro.

  4. Escriba un Nombre para la aplicación.

  5. En Tipos de cuenta compatibles, seleccione Cuentas solo en este directorio organizativo.

    Nota

    Actualmente no se admiten otros tipos de cuenta.

  6. Seleccione Registrar para crear el Registro de aplicación.

  7. Anote los valores de ID de la aplicación (cliente) e ID del directorio (inquilino).

    1. En la lista de navegación, seleccione Descripción general.
    2. En Essentials, copie los valores de Id. de aplicación (cliente) e Id. de directorio (inquilino) para usarlos en la siguiente sección.
  8. En la lista de navegación, seleccione Administrar>Permisos de API.

  9. En Permisos configurados, seleccione Agregar un permiso para abrir el panel Solicitar permisos de API.

    1. Seleccione SharePoint.
    2. En ¿Qué tipo de permisos requiere la aplicación?, seleccione Permisos de la aplicación.
    3. En Seleccionar permisos, seleccione Sites.FullControl.All.
    4. Seleccione Agregar permisos para crear el permiso de SharePoint.
    5. Seleccione Conceder consentimiento de administrador para <tenant name>.

Requisitos previos de configuración del servidor

  1. Aplicación de la actualización de Service Update 1.36 para Microsoft Dynamics CRM (local) 9.1: Soporte técnico de Microsoft

  2. Descargue el paquete NuGet para el ensamblado "Microsoft.Identity.Client", versión 4.11.0.

    1. Abrir https://www.nuget.org/packages/Microsoft.Identity.Client/4.11.0#readme-body-tab
    2. En Acerca de, seleccione Descargar paquete
  3. Cambie el nombre del paquete descargado de "microsoft.identity.client.4.11.0.nupkg" a microsoft.identity.client.4.11.0.zip.

  4. Ejecute extraer en microsoft.identity.client.4.11.0.zip.

  5. Dentro del directorio extraído, abra la carpeta lib/net45 y busque los archivos "Microsoft.Identify.Client.dll" y "Microsoft.Identify.Client.xml" para usarlos en un paso posterior.

  6. En el Windows Server donde se ejecuta el rol de servidor de aplicación web de Dynamics 365 Customer Engagement (on-premises), abra el Administrador de Internet Information Services.

    1. Abra el símbolo del sistema Ejecutar desde el menú Inicio de la barra de tareas de Windows.
    2. Escriba inetmgr y, a continuación, pulse Entrar.
  7. Expanda la sección Sitios, en el panel Conexiones.

  8. Haga clic derecho en el sitio Microsoft Dynamics CRM, seleccione Explorar y después abra la carpeta CRMWeb.

  9. Abra la carpeta bin.

  10. Copie los dos archivos "Microsoft.Identity.Client.dll" y "Microsoft.Identity.Client.xml" del directorio del paquete extraído NuGet y, a continuación, péguelos en la carpeta bin.

Crear un registro de aplicación de Azure en la tabla PartnerApplicationBase de la base de datos de la organización de Dynamics 365 Customer Engagement

  1. Abra SQL Server Management Studio y copie este script SQL.
-- Set transaction isolation level to READ UNCOMMITTED.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
 
--Customer need to provide the AAD app id that is to be used for authentication to SharePoint online.
DECLARE @byoaAppId NVARCHAR(36) = '<appId>';
--Customer need to provide the tenant id for SharePoint online.
DECLARE @tenantId NVARCHAR(36) = '<tenantId>';
 
-- Validate required parameters
IF ((@byoaAppId IS NULL OR TRY_CONVERT(UNIQUEIDENTIFIER, @byoaAppId) IS NULL)
    OR (@tenantId IS NULL OR TRY_CONVERT(UNIQUEIDENTIFIER, @tenantId) IS NULL))
        THROW 51001, 'Both Customer AAD App ID and Tenant ID must be provided and valid UNIQUEIDENTIFIERs.', 1;
 
SET @byoaAppId = CONVERT(UNIQUEIDENTIFIER, @byoaAppId);
SET @tenantId = CONVERT(UNIQUEIDENTIFIER, @tenantId);
 
IF (SELECT COUNT(*)
    FROM OrganizationBase) <> 1
      THROW 51000, 'Organization records does not equal 1', 1
 
DECLARE @organizationId UNIQUEIDENTIFIER  = (SELECT OrganizationId
                                             FROM OrganizationBase);
DECLARE @utcNow DATETIME = GetUtcDate();
DECLARE @sharePointOnlinePrincipalId UNIQUEIDENTIFIER = '00000003-0000-0ff1-ce00-000000000000';
DECLARE @sharePointOnlineAppId UNIQUEIDENTIFIER = '38616d01-8e81-42dd-82fb-b68f2cecac3a';
DECLARE @applicationName NVARCHAR(100) = 'Microsoft SharePoint Online';
 
BEGIN TRY
    BEGIN TRANSACTION InsertRows;
 
    -- Handle Microsoft-provided SharePoint Online app
    -- Check current state of Microsoft SharePoint Online record
    DECLARE @microsoftAppExists BIT = 0;
    DECLARE @microsoftAppNeedsUpdate BIT = 0;
 
    SELECT @microsoftAppExists = 1,
           @microsoftAppNeedsUpdate = CASE 
                 WHEN TenantId IS NULL OR TenantId <> @tenantId THEN 1 
                 ELSE 0 
                 END
    FROM PartnerApplicationBase
    WHERE PrincipalId = @sharePointOnlinePrincipalId
         AND OrganizationId = @organizationId
         AND Name = @applicationName
         AND PartnerApplicationId = @sharePointOnlineAppId;
 
    IF @microsoftAppExists = 1 AND @microsoftAppNeedsUpdate = 1
    BEGIN
        -- Update existing Microsoft record with correct TenantId
        UPDATE PartnerApplicationBase
        SET TenantId = @tenantId,
            ModifiedOn = @utcNow
        WHERE PrincipalId = @sharePointOnlinePrincipalId
              AND OrganizationId = @organizationId
              AND Name = @applicationName
              AND PartnerApplicationId = @sharePointOnlineAppId;
    END
    ELSE IF @microsoftAppExists = 1
    BEGIN
        SELECT 'Partner Application record already exists and is correct for Microsoft SharePoint Online with app ID ' + CAST(@sharePointOnlineAppId AS NVARCHAR(36)) AS Message;
    END
    ELSE
    BEGIN
        -- Insert new Microsoft record
        INSERT INTO [dbo].[PartnerApplicationBase]
           ([PrincipalId], [StateCode], [Name], [UseAuthorizationServer], [PartnerApplicationId],
           [StatusCode], [ApplicationRole], [Organizationid], [CreatedOn], [ModifiedOn], [TenantId])
        VALUES
           (@sharePointOnlinePrincipalId, 0, @applicationName, 1, @sharePointOnlineAppId,
            1, 1, @organizationId, @utcNow, @utcNow, @tenantId);
    END
 
    -- Handle customer-provided AAD app
    IF NOT EXISTS (
        SELECT 1
        FROM PartnerApplicationBase
        WHERE PrincipalId = @sharePointOnlinePrincipalId
              AND OrganizationId = @organizationId
              AND Name = @applicationName
              AND PartnerApplicationId = @byoaAppId)
    BEGIN
        -- Insert customer AAD app record
        INSERT INTO [dbo].[PartnerApplicationBase]
           ([PrincipalId], [StateCode], [Name], [UseAuthorizationServer], [PartnerApplicationId],
           [StatusCode], [ApplicationRole], [Organizationid], [CreatedOn], [ModifiedOn], [TenantId])
        VALUES
           (@sharePointOnlinePrincipalId, 0, @applicationName, 1, @byoaAppId,
            1, 1, @organizationId, @utcNow, @utcNow, @tenantId);
    END
    ELSE
    BEGIN
        SELECT 'Partner Application record already exists for Microsoft SharePoint Online with app ID ' + CAST(@byoaAppId AS NVARCHAR(36)) AS Message;
    END
 
    COMMIT TRANSACTION InsertRows;
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION InsertRows;
 
    -- Log error details for script-level errors
    SELECT
    ERROR_NUMBER() AS ErrorNumber,
    ERROR_SEVERITY() AS ErrorSeverity,
    ERROR_STATE() AS ErrorState,
    ERROR_LINE() AS ErrorLine;
END CATCH
  1. En el script, actualice las variables @byoaAppId y @tenantId con los valores de ID de la aplicación e ID del inquilino que copió anteriormente del portal de Microsoft Azure en la sección Crear una aplicación de Azure con permisos de SharePoint de este artículo.

  2. Verifique la base de datos y luego ejecute el script.

  3. Confirme ejecutando la consulta de selección SELECT * FROM [PartnerApplicationBase] y verificando los campos PartnerApplicationId y TenantId.

Agregar el certificado de servidor a servidor al almacén de certificados local y a la base de datos de configuración de Customer Engagement (local)

  1. Abra una sesión de comandos de PowerShell en todos los servidores en los que está instalado el rol Servidor completo de Dynamics 365.

    Importante

    Si tiene una implementación de roles de servidor, debe ejecutar el comando que se describe aquí en todos los servidores de Dynamics 365 en los que se ejecuta el rol servidor de aplicaciones web.

  2. Cambie la ubicación a la <carpeta unidad>:\Archivos de programa\Microsoft Dynamics CRM\Tools.

  3. Ejecute el script de Windows PowerShell CertificateReconfiguration.ps1 como se explica aquí:

    • certificateFilepath\Personalcertfile.pfx . Parámetro obligatorio que especifica la ruta de acceso completa al archivo de intercambio de información personal (.pfx). Más información: Trabajar con certificados digitales

    • personal_certfile_password decontraseña. Parámetro obligatorio que especifica la contraseña del certificado privado.

    • certificateType S2STokenIssuer. Parámetro obligatorio que especifica el tipo de certificado. En el caso de Customer Engagement (local) y la integración basada en servidor de SharePoint, solo se admite S2STokenIssuer .

    • serviceAccount 'DomainName\UserName' o 'Network Service'. Parámetro obligatorio que especifica la identidad del rol servidor de aplicaciones web. La identidad es una cuenta de usuario de dominio, como contoso\CRMWebAppServer o servicio de red. La identidad se concederá permiso al certificado.

    • updateCrm. Agrega la información del certificado a la base de datos de configuración de Microsoft Customer Engagement (local).

    Importante

    Incluso si tiene implementados varios roles de servidor de aplicaciones web o de servicio asincrónico, solo tiene que ejecutar el comando con el updateCrm parámetro una vez.

    • storeFindType FindBySubjectDistinguishedName. Especifica el tipo de almacén de certificados. De forma predeterminada, este valor es FindBySubjectDistinguishedName y se recomienda al ejecutar el script.

    Importante

    Aunque los updateCrm parámetros y StoreFindType son opcionales para ejecutar el comando, estos parámetros son necesarios para la integración de SharePoint basada en servidor para que la información del certificado se agregue a la base de datos de certificación.

    Ejemplo:

    .\CertificateReconfiguration.ps1 -certificateFile c:\Personalcertfile.pfx -password personal_certfile_password -updateCrm -certificateType S2STokenIssuer -serviceAccount Domain\UserName -storeFindType FindBySubjectDistinguishedName
    

Cargar certificado en certificados de aplicación Azure

Obtenga el certificado de Dynamics 365 Customer Engagement (on-premises) existente mediante este script.

cd $PSScriptRoot 

$OutputFilePath = $PSScriptRoot + "\certificates\existing_crmsharepoints2s.cer" 
$RemoveSnapInWhenDone = $False 

if (-not (Get-PSSnapin -Name Microsoft.Crm.PowerShell -ErrorAction SilentlyContinue)) { 
    Add-PSSnapin Microsoft.Crm.PowerShell 
    $RemoveSnapInWhenDone = $True 
} 

try { 
    # Ensure the directory exists 
    $directory = [System.IO.Path]::GetDirectoryName($OutputFilePath) 
    if (-not (Test-Path -Path $directory)) { 
        New-Item -ItemType Directory -Path $directory | Out-Null 
    }

    # Fetch existing certificate using Get-CrmCertificate and filter by CertificateType 
    $existingCert = Get-CrmCertificate | Where-Object { $_.CertificateType -eq "S2STokenIssuer" } 

    if ($null -eq $existingCert) { 
        Write-Error "No certificate found with CertificateType 'S2STokenIssuer'." 
        return 
    } 

    # Store the certificate in the specified path 
    $certBytes = [Convert]::FromBase64String($existingCert.Data) 
    [System.IO.File]::WriteAllBytes($OutputFilePath, $certBytes) 
    Write-Output "Certificate saved to $OutputFilePath" 
} 
catch { 
    Write-Error "An error occurred: $_" 
} 
finally { 
    if ($RemoveSnapInWhenDone) { 
        Remove-PSSnapin Microsoft.Crm.PowerShell 
    } 
} 

Si el script de PowerShell devuelve "No se encontró ningún certificado con CertificateType 'S2STokenIssuer'".

  1. Búsqueda del servidor CRM con el rol de herramientas de implementación

  2. Inicio de sesión con un administrador de implementación de CRM

  3. Reemplace @crmCertFile por el archivo de certificado de ruta de acceso completa y ejecute el script de PowerShell como administrador.

    add-pssnapin microsoft.crm.powershell
    
    $CrmCertificate = "@crmCertFile" 
    
    Params = @{
        CertificateType = S2STokenIssuer
        StoreName = My
        StoreLocation = LocalMachine
        StoreFindType = FindBySubjectDistinguishedName
        DataFile = $CrmCertificate
    }
    Set-CrmCertificate @Params
    

Cargue el certificado existente en certificados de aplicación de Azure

  1. Abra un explorador web y vaya al Azure Portal para la aplicación de Azure AD que se creó en la primera sección.

  2. Expanda Administrar y seleccione Certificados y secretos.

  3. Cargue el archivo de certificado creado.

    1. En la sección Certificados, seleccione Cargar certificado.

    2. Utilice Cargar un certificado para seleccionar el archivo de certificado que se creó a partir del script PowerShell.

    3. Agregue la Descripción y seleccione Agregar.

El certificado recién creado se muestra en la lista Certificados.