0
votes

Erreur: AADSTS500011: le principal de ressource nommé "URL" est introuvable dans le client

J'essaie d'ajouter une application à notre site SharePoint Online à l'aide du modèle de https://docs.microsoft.com/en-us/sharepoint/dev/spfx/web-parts/get-started/build-a-hello- world-web-part et nous obtenons l'erreur ci-dessous lorsque nous déployons sur SharePoint et ajoutons l'application / Webpart à un site SharePoint de test. Nous utilisons TypeScript comme modèle.

Quelqu'un d'autre a-t-il rencontré ce problème ou sait-il où chercher le problème?

Erreur externe d'affichage du pilote [objet objet] trouvé: Erreur: AADSTS500011: le principal de ressource nommé https://driverdisplayexternal.azurewebsites.net n'a pas été trouvé dans le client nommé 7018324c-9efd-4880-809d-b2e6bb1606b6. Cela peut se produire si l'application n'a pas été installée par l'administrateur du locataire ou acceptée par un utilisateur du locataire. Vous avez peut-être envoyé votre demande d'authentification au mauvais locataire. ID de trace: 358b22eb-cd2c-4091-b592-5a57cbc21d00 ID de corrélation: ec96d656-1a36-42e2-a2b9-3ff78efc1e2e Horodatage: 2019-10-01 16: 26: 06Z

Nous avons ajouté un appel à notre propre client comme indiqué ci-dessous. Nous ne savons pas pourquoi le principal de la ressource n'a pas été trouvé. La correspondance de l'ID de locataire et les éléments semblent être correctement configurés pour l'authentification.

HelloWorldWebPart.ts

{
  "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/package-solution.schema.json",
  "solution": {
    "name": "helloworld-webpart-client-side-solution",
    "id": "**ID**",
    "version": "4.1.0.0",
    "includeClientSideAssets": true,
    "isDomainIsolated": false,
    "webApiPermissionRequests": [
      {
        "resource": "DriverDisplayExternal",
       "scope": "User.Read.All"
      }
     ]
  },
  "paths": {
    "zippedPackage": "solution/helloworld-webpart.sppkg"
  }
}

package-solution.json

...
   this.context.aadHttpClientFactory
      .getClient('https://driverdisplayexternal.azurewebsites.net')
      .then((client: AadHttpClient): void => {

        client
          .get('https://driverdisplayexternal.azurewebsites.net/api/values', AadHttpClient.configurations.v1)
          .then((response: HttpClientResponse): Promise < Order[] > => {
            this.domElement.innerHTML += 'Received a response from Driver Display External: ' + response;
            return response.json();
          })

          .catch(error => {

            this.domElement.innerHTML += 'Driver Display External Error:  ' + error;
            console.error(error);
          });
      });
...

Toute aide ou direction à l'endroit où le problème peut être serait très appréciée. Merci d'avance!


6 commentaires

Si vous souhaitez appeler le service protégé par Azure AD, l'URL de la ressource doit être l'URL de l'ID d'application de l'application Azure AD. Pour plus de détails, veuillez consulter stackoverflow.com/questions/36059051/...


@JimXu J'ai essayé cela et cela n'a malheureusement pas fonctionné. Merci pour la suggestion.


Pouvez-vous me dire si vous pouvez appeler l'API à partir d'autres outils tels que Postman?


Oui, nous pouvons avec le facteur. Mon collègue a créé une nouvelle application avec une manière différente d'obtenir ce dont nous avons besoin, mais nous n'avons toujours pas résolu ce problème malheureusement.


Est-ce que vous protégez votre API par Azure AD? Si tel est le cas, pouvez-vous me dire si le locataire de l'application AD que vous utilisez pour protéger l'API et le locataire de SharePoint est le même?


Oui, ils devraient être sur le même locataire. Nous protégeons notre API par Azure AD oui.


3 Réponses :


1
votes

Je n'ai jamais utilisé cette API, mais si je devais deviner, vous devez modifier la valeur ici:

      .getClient('https://driverdisplayexternal.azurewebsites.net')

Vous pouvez utiliser soit l'ID client / ID d'application, soit l'URI d'ID d'application.


3 commentaires

Merci pour la réponse rapide Juunas. J'ai essayé de mettre mon identifiant client / identifiant d'application et j'ai reçu une erreur différente. "TypeError: Échec de la récupération". Je ne pense pas que ce soit plus proche mais j'apprécie la suggestion!


La saisie de l'ID d'application / client de l'application enregistrée dans Azure contenant les étendues d'autorisation personnalisées a résolu le problème pour moi. Donc ie .getClient ('application id guid')


J'ai essayé d'utiliser l'ID d'application / client et n'a malheureusement pas fonctionné. Toujours coincé.



0
votes

Je ne sais pas si vous avez trouvé la réponse ou non. Lorsque vous avez utilisé SPFx pour demander votre propre point de terminaison API Web personnalisé. il y a quelques étapes:

  • demandez l'autorisation afin que vous puissiez accéder à l'administrateur SPO pour approuver l'autorisation que vous demandez. dans ce cas, les ressources webApiPermissionRequests-> doivent correspondre au nom d'affichage principal de service de votre application AAD. une fois l'application AAD créée, vous pouvez exécuter Get-AzureADServicePrincipal pour obtenir tous vos ServicePrincipal.
  • une fois que vous avez demandé l'autorisation, à partir de votre code, vous devez appeler AadHttpClient.getClient () pour obtenir un objet aadHttpClient basé sur l'api resourceEndpoint que vous souhaitez, dans ce cas, vous devez transmettre l'URI de l'ID d'application de votre api Web qui peut être trouvé à partir de le manifeste de votre application AAD -> "identifierUris". De manière générale, cela devrait être quelque chose comme le format api: // [clientid]. mais vous pouvez le changer en n'importe quelle valeur unique. J'espère que cela aide.

0 commentaires

0
votes

Dans mon cas, j'ai dû utiliser l'identifiant d'application lorsque je consommais une API multi-locataire .


0 commentaires