Udostępnij przez


Używanie wartości głównych usługi z Fabric API w GraphQL

Wykonaj kroki opisane w sekcji Łączenie aplikacji , aby zapewnić dostęp do podmiotów zabezpieczeń użytkowników. Dostęp do interfejsu API GraphQL można również uzyskać za pomocą jednostki usługi:

  1. Wykonaj kroki opisane w temacie Łączenie aplikacji , aby utworzyć aplikację Microsoft Entra, ale pamiętaj, że zakresy nie są potrzebne dla jednostek usługi. W nowej aplikacji dodaj klucz tajny klienta w obszarze Certyfikaty i wpisy tajne. Aby uzyskać więcej informacji, zobacz Rejestrowanie aplikacji Microsoft Entra i tworzenie jednostki usługi.

  2. Upewnij się, że administratorzy dzierżawy włączają użycie jednostek usługi w sieci szkieletowej. W portalu administracyjnym dzierżawy przejdź do pozycji Ustawienia dzierżawy. W obszarze Ustawienia dewelopera włącz jednostki usługi mogą używać interfejsów API sieci szkieletowej. Po włączeniu tego ustawienia aplikacja jest widoczna w portalu sieci szkieletowej w celu przypisania roli lub uprawnień. Więcej informacji na temat obsługi tożsamości można znaleźć.

  3. Jednostka usługi musi mieć dostęp zarówno do interfejsu API GraphQL, jak i źródła danych, a dokładniej uprawnienie do wykonywania do interfejsu API GraphQL oraz wymagany dostęp do odczytu lub zapisu w wybranym źródle danych. W portalu sieci szkieletowej otwórz obszar roboczy i wybierz wielokropek obok pozycji Interfejs API. Wybierz pozycję Zarządzaj uprawnieniami dla interfejsu API, a następnie pozycję Dodaj użytkownika. Dodaj aplikację i wybierz pozycję Uruchom zapytania i mutacje, które zapewniają wymagane uprawnienia wykonywania dla jednostki usługi. W celach testowych najprostszym sposobem zaimplementowania wymaganych uprawnień zarówno dla interfejsu API, jak i źródła danych jest dodanie aplikacji jako członka obszaru roboczego z rolą współautora, w której znajdują się zarówno elementy interfejsu API GraphQL, jak i źródła danych.

Zrzut ekranu przedstawiający uprawnienia interfejsu API GraphQL.

Ponieważ jednostka usługi wymaga certyfikatu lub klucza tajnego klienta, nie jest obsługiwana przez bibliotekę Microsoft Authentication Library (MSAL) w aplikacjach jednostronicowych (SPA), takich jak aplikacja React wbudowana w ostatnim kroku. Usługę zaplecza można prawidłowo zabezpieczyć za pomocą dobrze zdefiniowanej logiki autoryzacji w zależności od wymagań i przypadków użycia.

Po skonfigurowaniu dostępu do interfejsu API przez jednostkę usługi można ją przetestować lokalnie przy użyciu prostej aplikacji Node.JS na komputerze lokalnym:

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);
    }
}

Zainstaluj zależności (@azure/identity) przy użyciu wybranego menedżera pakietów Node.js, zmodyfikuj plik przy użyciu wymaganych informacji, zapisz go i wykonaj (node <filename.js>). Spowoduje to pobranie tokenu z firmy Microsoft Entra.

Token może następnie służyć do wywoływania interfejsu API graphQL przy użyciu programu PowerShell, zastępując odpowiednie szczegóły pobranym tokenem , zapytanie GraphQL , które chcesz wykonać, oraz punkt końcowy interfejsu 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 

Alternatywnie użyj narzędzia cURL, aby uzyskać ten sam wynik:

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)>"}'

W przypadku testowania lokalnego zmodyfikuj kod Node.js nieco z dodatkową zależnością (axios), aby pobrać token i wywołać interfejs API w jednym wykonaniu:

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();