애플리케이션 연결 섹션의 단계에 따라 사용자 보안 주체에 대한 액세스를 제공합니다. 서비스 주체를 사용하여 GraphQL API에 액세스할 수도 있습니다.
애플리케이션 연결의 단계에 따라 Microsoft Entra 애플리케이션을 만드세요. 하지만 서비스 주체에 대해서는 범위가 필요하지 않다는 점을 유념하세요. 새 앱에서 인증서 및 비밀 아래에 클라이언트 암호를 추가합니다. 자세한 내용은 Microsoft Entra 앱 등록 및 서비스 주체 만들기를 참조하세요.
테넌트 관리자가 Fabric에서 서비스 주체를 사용하도록 설정해야 합니다. 테넌트 관리 포털에서 테넌트 설정으로 이동합니다. 개발자 설정에서 서비스 주체는 패브릭 API를 사용할 수 있습니다. 이 설정을 사용하도록 설정하면 역할 또는 권한 할당을 위해 애플리케이션이 패브릭 포털에 표시됩니다. ID 지원에 대한 자세한 정보를 찾을 수 있습니다.
서비스 주체는 GraphQL API와 데이터 원본 모두에 대한 액세스 권한이 필요하며, 특히 GraphQL API에 대한 권한 실행 및 그에 따라 선택한 데이터 원본에 필요한 읽기 또는 쓰기 액세스 권한이 필요합니다. 패브릭 포털에서 작업 영역을 열고 API 옆에 있는 줄임표를 선택합니다. API에 대한 권한 관리를 선택한 다음, 사용자 추가를 선택합니다. 애플리케이션을 추가하고 서비스 주체에 필요한 실행 권한을 제공하는 쿼리 및 변경 실행을 선택합니다. 테스트를 위해 API 및 데이터 원본 모두에 필요한 권한을 구현하는 가장 쉬운 방법은 GraphQL API 및 데이터 원본 항목이 둘 다 있는 기여자 역할이 있는 작업 영역 멤버로 애플리케이션을 추가하는 것입니다.
서비스 주체에는 인증서 또는 클라이언트 암호가 필요하기 때문에 마지막 단계에서 빌드된 React 앱과 같은 SPA(단일 페이지 애플리케이션)에서 MSAL(Microsoft 인증 라이브러리)에서 지원되지 않습니다. 요구 사항 및 사용 사례에 따라 잘 정의된 권한 부여 논리로 적절하게 보호된 백 엔드 서비스를 사용할 수 있습니다.
서비스 주체가 API에 액세스하도록 구성되면 로컬 컴퓨터에서 간단한 Node.JS 애플리케이션을 사용하여 로컬로 테스트할 수 있습니다.
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);
}
}
선택한 Node.js 패키지 관리자와 함께 종속성(@azure/identity)을 설치하고, 필요한 정보를 사용하여 파일을 수정하고, 저장하고, 실행합니다(node <filename.js>). Microsoft Entra에서 토큰을 검색합니다.
그런 다음, 적절한 세부 정보를 검색한 토큰, 실행하려는 GraphQL 쿼리 및 GraphQL API 엔드포인트로 바꿔 PowerShell을 사용하여 GraphQL API를 호출하는 데 토큰을 사용할 수 있습니다.
$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
또는 cURL을 사용하여 동일한 결과를 얻을 수 있습니다.
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)>"}'
로컬 테스트의 경우 추가 종속성(axios)을 사용하여 Node.js 코드를 약간 수정하여 토큰을 검색하고 단일 실행에서 API를 호출합니다.
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();
관련 콘텐츠
- Azure에서 Microsoft Entra 앱 만들기
- Fabric에서 GraphQL용 API를 만들고 데이터를 추가하는 방법을 알아봅니다.
- GraphQL용 패브릭 API에서 여러 데이터 원본을 쿼리하는 방법을 알아보세요.