Définir les paramètres de la stratégie d’exposition des ressources

Effectué

Lorsque vous démarrez un nouveau projet, un fichier app.json est généré automatiquement. Ce dernier comporte les informations sur l’extension que vous créez.

Dans le fichier app.json, vous pouvez spécifier un paramètre nommé resourceExposurePolicy qui définit l’accèssibilité des ressources et du code source lors des différentes opérations.

Le paramètre resourceExposurePolicy spécifie la liste d’options suivante :

  • applyToDevExtension

  • allowDebugging

  • allowDownloadingSource

  • includeSourceInSymbolFile

Chacune de ces propriétés définit les zones spécifiques dans lesquelles le code source d’une extension est accèssible. Toutes les options sont définies par défaut sur false. Autrement dit, par défaut, aucune extension dépendante ne peut déboguer ou télécharger le code source de votre extension.

Voici la syntaxe du paramètre resourceExposurePolicy :

`"resourceExposurePolicy": {"applyToDevExtension": <boolean>, "allowDebugging": <boolean>, "allowDownloadingSource": <boolean>, "includeSourceInSymbolFile": <boolean>}`

Les options allowDebugging, allowDownloadingSource et includeSourceInSymbolFile sont désormais activées par défaut pour le modèle de projet AL:Go! Cela est visible dans le fichier app.json où la propriété resourceExposurePolicy du projet est définie.

Vous pouvez toujours remplacer cela pour votre extension AppSource ou par abonné en modifiant le paramètre.

Le modèle AL: Go! définit les options allowDebugging, allowDownloadingSource et includeSourceInSymbolFile du paramètre resourceExposurePolicy sur true.

applyToDevExtension

Avec l’indicateur applyToDevExtension, vous pouvez indiquer si toutes les stratégies d’exposition des ressources spécifiées pour l’extension s’appliquent également aux extensions de développeur, en définissant la valeur sur true.

allowDebugging

Pour autoriser le débogage dans votre extension, vous devez définir l’indicateur allowDebugging lorsque l’extension est considérée comme une dépendance, sinon le débogage n’est pas autorisé. La valeur par défaut de l’indicateur allowDebugging est false.

Si vous souhaitez autoriser le débogage dans votre extension pour afficher le code source, la propriété allowDebugging du fichier app.json doit être définie sur true. Par exemple, si une personne développe une extension A et qu’une autre développe une extension B, où B dépend de A, le débogage de B intervient dans le code de A seulement si une méthode de A est appelée et que l’indicateur allowDebugging est défini sur true dans le fichier app.json de l’extension A, comme illustré dans l’exemple ci-dessous. En ajoutant ce paramètre, vous activez le débogage dans une extension pour afficher le code source et les variables lorsque cette extension est définie comme dépendance.

"resourceExposurePolicy": {"allowDebugging": true}

L’indicateur allowDebugging ne s’applique pas aux Profils, Personnalisations de page et Vues, car ces objets ne peuvent pas définir de logique personnalisée dans les procédures ou déclencheurs. Le code pour les Profils, Personnalisations de page et Vues définis dans une extension avec l’indicateur allowDebugging défini sur false peut toujours être consulté et copié à l’aide du Concepteur.

L’attribut [NonDebuggable]

À moins que vous n’ayez spécifié l’attribut [NonDebuggable] sur les méthodes et les variables, la définition de l’indicateur allowDebugging sur true permet d’entrer dans ce code. Toutefois, si vous avez marqué les méthodes et les variables à l’aide de l’attribut [NonDebuggable], elles ne peuvent toujours pas être déboguées.

La valeur par défaut de l’indicateur allowDebugging est false. Si l’indicateur allowDebugging est défini sur true, toute personne qui étend votre code peut le déboguer.

Cependant, il n’est pas possible d’autoriser à la fois le débogage et la fonctionnalité Atteindre la définition, tout en protégeant la source contre l’extraction tout au long de l’expérience de débogage, par exemple à l’aide d’outils Visual Studio Code tiers. Pour les applications AppSource, si vous souhaitez protéger votre propriété intellectuelle, il est recommandé de limiter l’accès à la source en définissant l’indicateur resourceExposurePolicy sur false. Appuyez-vous ensuite sur la possibilité d’accorder à vous-même et éventuellement à des partenaires revendeurs de confiance un accès individuel limité dans le temps grâce au remplacement dynamique de la stratégie d’exposition des ressources.

Pour les extensions par abonné, si le client possède la propriété intellectuelle et approuve son exposition, il est recommandé d’autoriser au moins le débogage et d’inclure la source dans les symboles pour faciliter la résolution des problèmes, l’extraction de la propriété intellectuelle du service et la collaboration avec et entre les revendeurs.

Une personne peut continuer à afficher votre code si une extension est déployée au moyen de Visual Studio Code en tant qu’extension DEV plutôt qu’à l’aide d’un cmdlet, à l’aide de la page Gestion des extensions dans Business Central ou d’AppSource. Le paramètre applyToDevExtension vous permet d’indiquer si toutes les stratégies d’exposition des ressources doivent également s’appliquer à votre extension DEV.

allowDownloadingSource

Lorsque cet indicateur est défini sur true dans le fichier app.json de l’extension A, le code source et tous les fichiers multimédias de l’extension A peuvent être téléchargés, par exemple depuis l’option Télécharger la source de la page Gestion des extensions dans Business Central. L’extension A peut être une extension PTE ou DEV. La valeur par défaut de l’indicateur allowDownloadingSource est false.

includeSourceInSymbolFile

Lorsque cet indicateur est défini sur true dans le fichier app.json de l’extension A, le fichier de symboles téléchargés dans Visual Studio Code accèssible à l’aide de la fonctionnalité Téléchargement de symboles comporte des symboles, le code source et toutes les autres ressources de l’extension A. Lorsque l’indicateur includeSourceInSymbolFile est défini sur false, la source n’est pas disponible dans les fichiers de symboles et vous ne pouvez pas afficher la source à l’aide de la fonctionnalité Atteindre la définition. Cependant, vous pouvez toujours étendre, obtenir IntelliSense pour, et appeler la fonctionnalité dans l’extension A en vous appuyant sur ses symboles et signatures exposés. La valeur par défaut de l’indicateur includesourceInSymbolFile est false.

Remplacer la stratégie d’exposition des ressources

Le remplacement de la stratégie d’exposition des ressources permet d’accorder dynamiquement un accès aux utilisateurs. Le remplacement de la stratégie est utile si, par exemple, vous avez défini l’indicateur allowDebugging sur false dans votre fichier app.json, mais que vous souhaitez autoriser des abonnés Microsoft Entra ID spécifiques à y accéder temporairement. Si vous ne spécifiez rien dans le secret BC-ResourceExposurePolicy-Overrides décrit ci-dessous, personne ne peut déboguer votre code si l’indicateur allowDebugging est défini sur false. En revanche, si vous avez défini l’indicateur allowDebugging sur true dans votre fichier app.json, ce que vous spécifiez dans le secret BC-ResourceExposurePolicy-Overrides n’a aucune importance. N’importe qui peut déboguer ce code.

Pour activer le remplacement de la stratégie d’exposition des ressources, vous devez configurer un coffre de clés. La configuration d’un coffre de clés est un processus d’intégration décrit dans les liens ci-dessous. Suivez les instructions pour protéger votre coffre de clés. Si le coffre de clés est utilisé à plusieurs fins, vous pouvez créer différentes stratégies d’accès pour remplacer le secret dans le coffre de clés.

Les remplacements de la stratégie d’exposition des ressources permettent d’accorder dynamiquement un accès aux utilisateurs d’un ID abonné Microsoft Entra ID donné. L’utilisateur effectuant une action telle qu’un débogage peut être un administrateur délégué ou un utilisateur invité dans l’environnement cible. De plus, vous devez spécifier la propriété de l’abonné dans le fichier launch.json. La propriété de l’abonné doit être définie sur l’ID abonné cible.

Le secret BC-ResourceExposurePolicy-Overrides

Une fois le coffre de clés configuré, la stratégie d’une extension peut être remplacée à l’aide des paramètres du coffre de clés de votre extension. Un secret nommé BC-ResourceExposurePolicy-Overrides doit être ajouté au coffre de clés. La valeur du secret est un fichier .json avec la structure illustrée dans l’exemple ci-dessous.

$json = '{ 
    "allowDebugging": [ 
      "9e2b6561-1ba6-4790-abcc-c84abf9a8961" 
    ], 
    "allowDownloadingSource": [ 
      "9e2b6561-1ba6-4790-abcc-c84abf9a8961" 
    ], 
    "includeSourceInSymbolFile": [ 
      "9e2b6561-1ba6-4790-abcc-c84abf9a8961" 
    ] 
}'
$Secret = ConvertTo-SecureString -String $json -AsPlainText -Force
Set-AzKeyVaultSecret -VaultName "YourKeyVaultName" -Name "BC-ResourceExposurePolicy-Overrides" -SecretValue $Secret

Comme la valeur de secret json s’étend dans ce cas sur plusieurs lignes, vous devez définir la valeur de secret json à l’aide d’Azure PowerShell au lieu du portail Azure. Pour activer une ou plusieurs propriétés à utiliser par un abonné Microsoft Entra ID, vous devez ajouter l’ID abonné pour activer cette propriété pour les utilisateurs de l’abonné. Cette opération permet d’accéder temporairement au code source, par exemple à des fins de débogage.