Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Seguire la procedura descritta nella sezione Connettere le applicazioni per fornire l'accesso alle entità utente. È anche possibile accedere all'API GraphQL con un'entità servizio:
Seguire la procedura descritta in Connettere le applicazioni per creare un'app Microsoft Entra, ma tenere presente che gli scopi non sono necessari per i principali del servizio. Nella nuova app aggiungere un segreto client in Certificati e segreti. Per altre informazioni, vedere Registrare un'app Microsoft Entra e creare un'entità servizio.
Assicurarsi che gli amministratori tenant abilitino l'utilizzo delle entità servizio in Fabric. Nel portale di amministrazione tenant passare a Impostazioni tenant. In Impostazioni sviluppatore abilitare le entità servizio può usare le API di infrastruttura. Con questa impostazione abilitata, l'applicazione è visibile nel portale di Infrastruttura per l'assegnazione di ruoli o autorizzazioni. Altre informazioni sul supporto delle identità sono disponibili.
L'entità principale del servizio deve accedere sia all'API GraphQL che all'origine dati; più precisamente, l'autorizzazione Execute per l'API GraphQL e l'accesso in lettura o scrittura necessario, di conseguenza, nell'origine dati scelta. Nel portale di infrastruttura aprire l'area di lavoro e selezionare i puntini di sospensione accanto all'API. Selezionare Gestisci autorizzazioni per l'API e quindi Aggiungi utente. Aggiungere l'applicazione e selezionare Esegui query e mutazioni, che fornisce le autorizzazioni di esecuzione necessarie per il principale del servizio. Ai fini dei test, il modo più semplice per implementare le autorizzazioni necessarie per l'API e l'origine dati consiste nell'aggiungere l'applicazione come membro dell'area di lavoro con un ruolo di collaboratore in cui si trovano sia l'API GraphQL che gli elementi dell'origine dati.
Poiché un'entità servizio richiede un certificato o un segreto client, non è supportata da Microsoft Authentication Library (MSAL) in applicazioni a pagina singola come l'app React compilata nell'ultimo passaggio. È possibile usare un servizio back-end protetto correttamente con logica di autorizzazione ben definita a seconda dei requisiti e dei casi d'uso.
Dopo aver configurato l'API per l'accesso da un'entità servizio, è possibile testarla in locale usando una semplice applicazione Node.JS nel computer locale:
const { ClientSecretCredential } = require('@azure/identity');
// Define your Microsoft Entra ID credentials
const tenantId = "<YOUR_TENANT_ID>";
const clientId = "<YOUR_CLIENT_ID>";
const clientSecret = "<YOUR_CLIENT_SECRET>"; // Service principal secret value
const scope = "https://api.fabric.microsoft.com/.default"; // The scope of the token to access Fabric
// Create a credential object with service principal details
const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Function to retrieve the token
async function getToken() {
try {
// Get the token for the specified scope
const tokenResponse = await credential.getToken(scope);
console.log("Access Token:", tokenResponse.token);
} catch (err) {
console.error("Error retrieving token:", err.message);
}
}
Installare le dipendenze (@azure/identity) con la gestione pacchetti Node.js scelta, modificare il file con le informazioni necessarie, salvarle ed eseguirlo (node <filename.js>). In questo modo viene recuperato un token da Microsoft Entra.
Il token può quindi essere usato per richiamare l'API GraphQL usando PowerShell sostituendo i dettagli appropriati con il token recuperato, la query GraphQL da eseguire e l'endpoint dell'API GraphQL:
$headers = @{
Authorization = "Bearer <YOUR_TOKEN>"
'Content-Type' = 'application/json'
}
$body = @{
query = @"
<YOUR_GRAPHQL_QUERY>
"@
}
# Make the POST request to the GraphQL API
$response = Invoke-RestMethod -Uri "<YOUR_GRAPHQL_API_ENDPOINT>" -Method POST -Headers $headers -Body ($body | ConvertTo-Json)
# Output the response
$response | ConvertTo-Json -Depth 10
In alternativa, usare cURL per ottenere lo stesso risultato:
curl -X POST <YOUR_GRAPHQL_API_ENDPOINT> \
-H "Authorization: <YOUR_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"query": "<YOUR_GRAPHQL_QUERY(in a single line)>"}'
Per i test locali, modificare leggermente il codice Node.js con una dipendenza aggiuntiva (axios) per recuperare il token e richiamare l'API in una singola esecuzione:
const { ClientSecretCredential } = require('@azure/identity');
const axios = require('axios');
// Microsoft Entra ID credentials
const tenantId = "<YOUR_TENANT_ID>";
const clientId = "<YOUR_CLIENT_ID>";
const clientSecret = "<YOUR_CLIENT_SECRET>"; // Service principal secret value
// GraphQL API details
const graphqlApiUrl = "YOUR_GRAPHQL_API_ENDPOINT>";
const scope = "https://api.fabric.microsoft.com/.default"; // The scope to request the token for
// The GraphQL query
const graphqlQuery = {
query: `
<YOUR_GRAPHQL_QUERY>
`
};
// Function to retrieve a token and call the GraphQL API
async function fetchGraphQLData() {
try {
// Step 1: Retrieve token using the ClientSecretCredential
const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
const tokenResponse = await credential.getToken(scope);
const accessToken = tokenResponse.token;
console.log("Access token retrieved!");
// Step 2: Use the token to make a POST request to the GraphQL API
const response = await axios.post(
graphqlApiUrl,
graphqlQuery,
{
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': 'application/json'
}
}
);
// Step 3: Output the GraphQL response data
console.log("GraphQL API response:", JSON.stringify(response.data));
} catch (err) {
console.error("Error:", err.message);
}
}
// Execute the function
fetchGraphQLData();
Contenuti correlati
- Creare un'app Microsoft Entra in Azure
- Informazioni su come creare un'API per GraphQL in Fabric e aggiungere dati.
- Informazioni su come eseguire query su più origini dati nell'API fabric per GraphQL.