2016-04-18 5 views
1

Ich versuche, Power BI Embedded von einer PHP-basierten Website zu verwenden, um ein nicht öffentliches Power BI-Dokument in eine Webseite einzubetten (hinter einer Benutzeranmeldung).Power BI Embedded von PHP. Erhalten Sie ein Azure-Authentifizierungs-Token OAuth

Es gibt eine C# Version hier, die ich habe laufen: https://github.com/Azure-Samples/power-bi-embedded-integrate-report-into-web-app/. Ich muss das in PHP effektiv replizieren).

(auch https://azure.microsoft.com/en-us/documentation/articles/power-bi-embedded-get-started/ sehen)

Ich versuche, steckt ein Auth-Token zu erhalten.

Die C# -Site erzeugt ein Authentifizierungs-Token, das ich verwenden kann, wenn ich in meine PHP-Site einfügen, um das Power-BI-Blatt zu laden. Ich bin mir aber nicht sicher, wie ich das aus PHP erzeugen soll - vermutlich eine Lock-Anfrage irgendwo, aber ich kann nicht herausfinden, was ich wohin schicken muss? [Bearbeiten: Ich habe Pakete geschnüffelt und es scheint keine HTTP-Anfrage zu erzeugen, damit ich vielleicht nur wissen muss, wie ich es selbst erzeugen kann?]. Das C# verwendet dazu eine eingebaute Bibliothek (PowerBIToken).

Ich bin auf der Suche nach einer einfachen Lösung, wo ich durch jeden Schritt statt einer aufgeblähten Bibliothek gehen kann, wenn möglich.

+0

Möchten Sie die Power BI Embedded-API unter https://msdn.microsoft.com/en-us/library/mt712303.aspx von PHP aufrufen oder Power BI-Berichte integrieren? Dein PHP-Web? –

+0

@Gary Liu potenziell beide. Die API, mit der Sie verbunden sind, benötigt ein App-Token, und das ist das Bit, das ich nicht herausfinden kann, wie ich aus PHP generieren kann. –

Antwort

1

Nach ein paar Nachforschungen habe ich diese selbst ausprobiert.

Das Token ist ein JWT-Token, das direkt aus PHP generiert werden kann.

Fügen Sie die JWT PHP-Klasse von hier: https://github.com/firebase/php-jwt

für Anrufe an die API für die Authentifizierung verwenden:

$key = "<your Azure access key>"; 
$payload = array(
    "ver" => "0.1.0", 
    "type" => "dev", 
    "wcn" => "<your workspace collection name>", 
    "wid" => "<your workspace ID>", 
    "iss" => "PowerBISDK", 
    "aud" => "https://analysis.windows.net/powerbi/api", 
    "exp" => time()+60*60, 
    "nbf" => time() 
); 
$token = JWT::encode($payload,$key); 

Und zum Anzeigen eines Berichts im Browser verwenden zu authentifizieren:

$key = "<your Azure access key>"; 
$payload = array(
    "ver" => "0.1.0", 
    "type" => "embed", 
    "wcn" => "<your workspace collection name>", 
    "wid" => "<your workspace ID>", 
    "rid" => "<your reportID (as uploaded to your collection)>", 
    "iss" => "PowerBISDK", 
    "aud" => "https://analysis.windows.net/powerbi/api", 
    "exp" => time()+60*60, 
    "nbf" => time() 
); 
$token = JWT::encode($payload,$key); 

Sie können dies dann als powerbi-access-token Attribut in Ihrem Bericht div im Browser verwenden.

Auch im Fall hilft es jemand, hier ist ein Beispiel für die Curl-I für die API verwenden:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://api.powerbi.com/beta/collections/<your workspace collection name>/workspaces/<your workspace ID>/reports"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //Might be required for https 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Authorization: AppToken " . $token 
)); 
$response_json = curl_exec($ch); 
curl_close($ch); 

$response_data = json_decode($response,true); 
0

Das C# Code-Snippet, das Sie zur Verfügung stellen, dient dazu, Power BI-Berichte in Ihre Website zu integrieren.

Als Power BI Unterstützt für die Einbindung von Power BI Dashboard auf Ihrer Website über IFrame. Embed the powerBi report in html iFrame. Um diese Anforderung in PHP Web App zu implementieren, können Sie versuchen, Power BI for HTML/JavaScript zu nutzen.

Oder direkt IFrame Dom in Ihrem PHP-View-Skript zugeschrieben. Z.B.

<html lang="en"> 
<head> 
    <script type="text/javascript"> 
     // post the auth token to the iFrame. 
     function postActionLoadReport() { 

      // get the access token. 
      accessToken = '<?php echo $accessToken;?>'; 

      // return if no a 
      if ("" === accessToken) 
       return; 

      // construct the push message structure 
      // this structure also supports setting the reportId, groupId, height, and width. 
      // when using a report in a group, you must provide the groupId on the iFrame SRC 
      var m = { action: "loadReport", accessToken: accessToken}; 
      message = JSON.stringify(m); 

      // push the message. 
      iframe = document.getElementById('iFrameEmbedReport'); 
      iframe.contentWindow.postMessage(message, "*");; 
     } 
    </script> 
</head> 
<body> 
    <div> 
     <p><b>Embedded Report</b></p> 
     <table> <tr> 
        <td> 
         <iframe id="iFrameEmbedReport" src="<?php echo $reportURI;?>" onload="postActionLoadReport()" height="768px" width="1024px" frameborder="1" seamless></iframe> 
        </td> 
       </tr> 
     </table> 
    </div> 
</body> 

Wir verweisen auf die Lösung des Gewindes auf der Power BI-Community bei http://community.powerbi.com/t5/Developer/report-embed-problem/td-p/11490/highlight/true.

+0

Hallo Gary, danke für die gründliche Antwort. Habe ich recht damit, dass dies nur für Berichte gilt, die mit der Option "Datei"> "Im Web veröffentlichen" auf der Power BI-Website im Internet veröffentlicht wurden? Leider bedeutet dies, dass die Berichte öffentlich sind, was für meinen Anwendungsfall leider nicht angemessen ist. https://powerbi.microsoft.com/en-us/documentation/powerbi-service-publish-to-web/#article-wrapper –

+0

Um zu klären, suchen Sie die Lösung in PHP, um die Funktionalität unter https zu implementieren: //powerbi.microsoft.com/en-us/documentation/powerbi-developer-integrate-a-power-bi-tile-or-report/? –

+0

Ja, ich denke schon - danke Gary, das könnte sein, was ich brauche: https://powerbi.microsoft.com/en-us/documentation/powerbi-developer-authenticate-a-web-app/ Ich nehme ein schaue –

2

Diese doc Seite half mir Token und embed-Codes bekommen von php/js - es beschreibt jede Anfrage und Antwort Schritt für Schritt:

https://msdn.microsoft.com/en-us/library/azure/dn645542.aspx

Autorisierungscode Grant-Flussdiagramm:

  • Registrieren Sie die Anwendung in Azure AD
  • Antrag ein Berechtigungscode
  • der Autorisierungscode Verwenden Sie eine Access-Token
  • Verwenden Sie den Zugriffstoken Fordern Sie die Ressourcen
  • Verwenden Sie die Refresh-Token für den Zugriff auf ein anfordern Neuer Zugriffstoken
  • Verwandte Themen