Power BI is turning 10! Tune in for a special live episode on July 24 with behind-the-scenes stories, product evolution highlights, and a sneak peek at what’s in store for the future.
Save the dateEnhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.
Hi,
I was wondering if anyone has been able to use a service principle to access graphql as they now support saved credentials? I am currently using a fabric notebook and have not been able to do so. Any insight would help, thanks.
Solved! Go to Solution.
Hi @clearyj3
According to the following documentation, currently Service Principals do not support saved credentials.
Connect applications to Fabric API for GraphQL - Microsoft Fabric | Microsoft Learn
Create and add data to an API for GraphQL - Microsoft Fabric | Microsoft Learn
Best Regards,
Jing
Community Support Team
Hi @clearyj3
Based on my testing, below code should work in a Fabric notebook. It uses Service principal with SSO.
import requests
import json
# Client Application information
client_id = "app client id"
client_secret = "app client secret"
tenant_id = "your tenant id"
# Get token for service principal
url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"
payload = f'grant_type=client_credentials&client_id={client_id}&client_secret={client_secret}&scope=https%3A%2F%2Fapi.fabric.microsoft.com%2F.default'
headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
response = requests.request("POST", url, headers=headers, data=payload)
if response.status_code == 200:
# Parsing the JSON response
json_response = response.json()
# Extracting the token
token = "Bearer " + json_response.get('access_token')
print("Access token retrieved!")
else:
print(f'Failed to get a response, status code: {response.status_code}')
# Use the token to make a POST request to the GraphQL API
workspace_id = "your workspace id"
graphql_api_id = "your graphql api item id"
api_endpoint = f"https://api.fabric.microsoft.com/v1/workspaces/{workspace_id}/graphqlapis/{graphql_api_id}/graphql"
graphql_query = json.dumps({
"query": "{ customers { items { Id CustomerId Name } } }" # replace the query with your graphql query
})
query_headers = {
'Content-Type': 'application/json',
'Authorization': token
}
result = requests.request("POST", api_endpoint, headers=query_headers, data=graphql_query)
print(result.text)
This is my testing result:
To authenticate with a service principal, I create an application in Microsoft Entra ID and give it Power BI Service Item.Execute.All permission. Create a client secret and use it for retrieving the access token. No other setup is required in Azure portal. Then I add the service principal as a Contributor member of the workspace to ensure that it has access to the GraphQL API and the underlying data source.
Hope this would be helpful.
References:
Create and add data to an API for GraphQL - Microsoft Fabric | Microsoft Learn
Connect applications to Fabric API for GraphQL - Microsoft Fabric | Microsoft Learn
Best Regards,
Jing
If this post helps, please Accept it as Solution to help other members find it. Appreciate your Kudos!
Hi @clearyj3
According to the following documentation, currently Service Principals do not support saved credentials.
Connect applications to Fabric API for GraphQL - Microsoft Fabric | Microsoft Learn
Create and add data to an API for GraphQL - Microsoft Fabric | Microsoft Learn
Best Regards,
Jing
Community Support Team
Thank you! How exactly would the Service Principle work for SSO? I tried some things, but nothing has worked.
Hi @clearyj3
Based on my testing, below code should work in a Fabric notebook. It uses Service principal with SSO.
import requests
import json
# Client Application information
client_id = "app client id"
client_secret = "app client secret"
tenant_id = "your tenant id"
# Get token for service principal
url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"
payload = f'grant_type=client_credentials&client_id={client_id}&client_secret={client_secret}&scope=https%3A%2F%2Fapi.fabric.microsoft.com%2F.default'
headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
response = requests.request("POST", url, headers=headers, data=payload)
if response.status_code == 200:
# Parsing the JSON response
json_response = response.json()
# Extracting the token
token = "Bearer " + json_response.get('access_token')
print("Access token retrieved!")
else:
print(f'Failed to get a response, status code: {response.status_code}')
# Use the token to make a POST request to the GraphQL API
workspace_id = "your workspace id"
graphql_api_id = "your graphql api item id"
api_endpoint = f"https://api.fabric.microsoft.com/v1/workspaces/{workspace_id}/graphqlapis/{graphql_api_id}/graphql"
graphql_query = json.dumps({
"query": "{ customers { items { Id CustomerId Name } } }" # replace the query with your graphql query
})
query_headers = {
'Content-Type': 'application/json',
'Authorization': token
}
result = requests.request("POST", api_endpoint, headers=query_headers, data=graphql_query)
print(result.text)
This is my testing result:
To authenticate with a service principal, I create an application in Microsoft Entra ID and give it Power BI Service Item.Execute.All permission. Create a client secret and use it for retrieving the access token. No other setup is required in Azure portal. Then I add the service principal as a Contributor member of the workspace to ensure that it has access to the GraphQL API and the underlying data source.
Hope this would be helpful.
References:
Create and add data to an API for GraphQL - Microsoft Fabric | Microsoft Learn
Connect applications to Fabric API for GraphQL - Microsoft Fabric | Microsoft Learn
Best Regards,
Jing
If this post helps, please Accept it as Solution to help other members find it. Appreciate your Kudos!
This is your chance to engage directly with the engineering team behind Fabric and Power BI. Share your experiences and shape the future.
User | Count |
---|---|
5 | |
4 | |
2 | |
2 | |
2 |