Advance your Data & AI career with 50 days of live learning, dataviz contests, hands-on challenges, study groups & certifications and more!
Get registeredGet Fabric Certified for FREE during Fabric Data Days. Don't miss your chance! Request now
Hello guys,
I am trying to update datasource credentials of dataset, first I am getting response of "Get GetBoundGatewayDatasources" with ID and Gateway id without any problems
Later on I am calling to "Patch GatewayDatasource" without any luck. I am getting 403 Forbidden error.
All the call I used before allowed me to use AppKey instead of token, unfortunately "Patch GatewayDatasource" seems like allows only tokens, because when I do use AppKey I am getting error that Token is not detected on Json, newerthless they tell us AppKey or Token is allowed: https://msdn.microsoft.com/en-us/library/azure/mt711498.aspx
This is how I am getting token, and I do believe something is wrong here:
public function getDashboardToken($workspaceId,$reportId) {
$key = env('ACCESS_KEY');
$collection_name = env('WORKSPACE_COLLECTION');
$payload = [
"ver" => "0.2.0",
"type" => "embed",
"wcn" => $collection_name,
"wid" => $workspaceId,
"rid" => $reportId,
"iss" => "PowerBISDK",
"aud" => "https://analysis.windows.net/powerbi/api",
"exp" => time()+60*60,
"nbf" => time()
];
$tokenListing = JWT::encode($payload, $key);
return ($tokenListing);
}This is my method for "Patch GatewayDatasource":
$ch = curl_init();
$data = array('credentialType' => 'Basic',
'basicCredentials'=>array(
'username' => 'username',
'password' => 'password',
)
);
$token = $this->getDashboardToken($workspaceId, $datasetId);
$headers = array();
$headers[] = "Authorization: AppToken " . $token;
$headers[] = 'Content-Type: application/json; charset=utf-8';
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, "https://api.powerbi.com/v1.0/collections/".$collection_name."/workspaces/".$workspaceId."/gateways/".$gatewayId."/datasources/".$datasource_id."/");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //Might be required for https
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$response_json = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);Many thanks!
Solved! Go to Solution.
Ok, seems like small error - I need to use
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
instead of:
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
And yeah, I need to use AppKey instead of Token, or at least I can't working it with token.
Ok, seems like small error - I need to use
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
instead of:
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
And yeah, I need to use AppKey instead of Token, or at least I can't working it with token.
Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!
Check out the October 2025 Power BI update to learn about new features.