Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
Abra el Azure Portal.
En Servicios Azure, seleccione Registros de aplicaciones.
Seleccione Nuevo registro.
Escriba un Nombre para la aplicación.
En Tipos de cuenta compatibles, seleccione Cuentas solo en este directorio organizativo.
Nota
Actualmente no se admiten otros tipos de cuenta.
Seleccione Registrar para crear el Registro de aplicación.
Anote los valores de ID de la aplicación (cliente) e ID del directorio (inquilino).
- En la lista de navegación, seleccione Descripción general.
- En Essentials, copie los valores de Id. de aplicación (cliente) e Id. de directorio (inquilino) para usarlos en la siguiente sección.
En la lista de navegación, seleccione Administrar>Permisos de API.
En Permisos configurados, seleccione Agregar un permiso para abrir el panel Solicitar permisos de API.
- Seleccione SharePoint.
- En ¿Qué tipo de permisos requiere la aplicación?, seleccione Permisos de la aplicación.
- En Seleccionar permisos, seleccione Sites.FullControl.All.
- Seleccione Agregar permisos para crear el permiso de SharePoint.
- Seleccione Conceder consentimiento de administrador para
<tenant name>.
Requisitos previos de configuración del servidor
Aplicación de la actualización de Service Update 1.36 para Microsoft Dynamics CRM (local) 9.1: Soporte técnico de Microsoft
Descargue el paquete NuGet para el ensamblado "Microsoft.Identity.Client", versión 4.11.0.
- Abrir https://www.nuget.org/packages/Microsoft.Identity.Client/4.11.0#readme-body-tab
- En Acerca de, seleccione Descargar paquete
Cambie el nombre del paquete descargado de "microsoft.identity.client.4.11.0.nupkg" a microsoft.identity.client.4.11.0.zip.
Ejecute extraer en microsoft.identity.client.4.11.0.zip.
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.
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.
- Abra el símbolo del sistema Ejecutar desde el menú Inicio de la barra de tareas de Windows.
- Escriba inetmgr y, a continuación, pulse Entrar.
Expanda la sección Sitios, en el panel Conexiones.
Haga clic derecho en el sitio Microsoft Dynamics CRM, seleccione Explorar y después abra la carpeta CRMWeb.
Abra la carpeta bin.
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
- 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
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.
Verifique la base de datos y luego ejecute el script.
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)
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.
Cambie la ubicación a la <carpeta unidad>:\Archivos de programa\Microsoft Dynamics CRM\Tools.
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
updateCrmparámetro una vez.-
storeFindType FindBySubjectDistinguishedName. Especifica el tipo de almacén de certificados. De forma predeterminada, este valor es
FindBySubjectDistinguishedNamey se recomienda al ejecutar el script.
Importante
Aunque los
updateCrmparámetros yStoreFindTypeson 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'".
Búsqueda del servidor CRM con el rol de herramientas de implementación
Inicio de sesión con un administrador de implementación de CRM
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
Abra un explorador web y vaya al Azure Portal para la aplicación de Azure AD que se creó en la primera sección.
Expanda Administrar y seleccione Certificados y secretos.
Cargue el archivo de certificado creado.
En la sección Certificados, seleccione Cargar certificado.
Utilice Cargar un certificado para seleccionar el archivo de certificado que se creó a partir del script PowerShell.
Agregue la Descripción y seleccione Agregar.
El certificado recién creado se muestra en la lista Certificados.