Check your eligibility for this 50% exam voucher offer and join us for free live learning sessions to get prepared for Exam DP-700.
Get StartedDon't miss out! 2025 Microsoft Fabric Community Conference, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount. Prices go up February 11th. Register 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.
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Prices go up Feb. 11th.
Check out the January 2025 Power BI update to learn about new features in Reporting, Modeling, and Data Connectivity.
User | Count |
---|---|
3 | |
2 | |
1 | |
1 | |
1 |