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!
3 Réponses :
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.
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é.
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:
Dans mon cas, j'ai dû utiliser l'identifiant d'application lorsque je consommais une API multi-locataire .
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.