Herunterladen des Web-App-Beispiels | Anzeigen des Codes auf GitHub: Default.aspx.cs | Redirect.aspx.cs

In diesem Artikel erfahren Sie, wie Power BI-Web-Apps authentifiziert werden. Er enthält C#-Beispiele, wobei der Authentifizierungsprozess für andere Web-Programmiersprachen identisch ist. Es gibt ein Beispiel für Web-Apps auf GitHub. Weitere Informationen zum Ausführen des Beispiels finden Sie unter Beispiel für Power BI-Web-App.

Power BI-Web-Apps verwenden Active Directory (AAD) zum Authentifizieren von Benutzern und zum Schutz von Anwendungen. Bei der Authentifizierung wird eine Anwendung oder ein Benutzer identifiziert. Damit Ihre Web-App in AAD identifiziert werden kann, registrieren Sie sie in AAD. Wenn Sie eine Web-App in AAD registrieren, übergeben Sie Ihren App-Zugriff an die Power BI-REST-API-Ressourcen. Informationen zum Registrieren Ihrer Power BI-Web-App finden Sie unter Registrieren einer Web-App.

Weitere Informationen zum Azure Active Directory (Azure AD)-Autorisierungsfluss finden Sie unter Authorization Code Grant-Datenfluss.

HINWEIS Für Power BI werden Apps im Azure-Verwaltungsportal als mehrinstanzfähige Apps erstellt.

Voraussetzungen für das Authentifizieren von Power BI-Web-Apps

Führen Sie zum Authentifizieren einer Power BI-Web-App und zum Ausführen einer REST-Webanforderung folgende Schritte aus: Diese Schritte gelten für eine ASP.NET-Web-App, aber auch für andere Plattformen. Weitere Informationen zu OAuth 2.0 in Azure AD finden Sie unter OAuth 2.0 in Azure AD.

Schritt 1: Registrieren Ihrer Web-App

Wenn Sie eine Web-App in Azure Active Directory registrieren, übergeben Sie Ihren App-Zugriff an die Power BI-REST-API-Ressourcen. Informationen zum Registrieren einer Power BI-Web-App finden Sie unter Registrieren einer Web-App.

Schritt 2: Konfigurieren von Power BI-Einstellungen für die Authentifizierung in Azure AD

Zum Authentifizieren einer Power BI-Web-App in Azure AD sind die folgenden Einstellungen erforderlich:

Einstellung Beschreibung Wert
Client-ID Die Anwendung identifiziert sich mithilfe der Client-ID bei den Benutzern, von denen sie Berechtigungen anfordert. Informationen zum Abrufen einer Client-ID für die Power BI-App finden Sie unter Abrufen einer Client-App-ID.
Geheimer Clientschlüssel Der geheime Clientschlüssel wird bei der Authentifizierung in Azure AD zusammen mit einer Client-ID gesendet, um eine Web-API aufzurufen. Informationen zum Abrufen eines geheimen Clientschlüssels für die Power Bi-App finden Sie unter Abrufen eines geheimen Clientschlüssels.
Ressourcen-URI Der Ressourcen-URI für die zu autorisierende Power BI-Ressource. Wichtig ist, dass Sie den exakten URI verwenden. https://analysis.windows.net/powerbi/api
Zertifizierungsstellen-URI Der Zertifizierungsstellen-URI ist eine Azure-Ressource, die mithilfe einer Client-ID ein Zugriffstoken abruft. https://login.windows.net/common/oauth2/authorize
Umleitungs-URL Eine Umleitungs-URL für die Web-App-URL. Der Azure AD-Dienst leitet mit einem Authentifizierungscode zur Web-App-URL um. Beispiel: http://localhost:13526/Redirect

Schritt 3: Erstellen einer Abfragezeichenfolge zum Abrufen eines Autorisierungscodes von Azure AD

Zum Authentifizieren einer Power BI-Web-App erstellen Sie zunächst eine URL-Abfragezeichenfolge für die Umleitung zum Azure AD-Authentifizierungsdienst. Nachdem Sie gültige Anmeldeinformationen eingegeben haben, gibt Azure AD einen Autorisierungscode zurück. Das folgende Beispiel zeigt eine vollqualifizierte Azure AD-URL mit einer Abfragezeichenfolge. Mit einer URL wie dieser rufen Sie einen Autorisierungscode von Azure AD ab. Verwenden Sie Response.Redirect() für die Umleitung zum Azure AD-Dienst, der einen Autorisierungscode von Azure AD zurückgibt. In Schritt 4 rufen Sie mit dem Autorisierungscode ein Zugriffstoken nach Autorisierungscode ab.

https://login.windows.net/common/oauth2/authorize
  ?response_type=code
  &client_id=1861585d...9a79c296
  &resource= https://analysis.windows.net/powerbi/api
  &redirect_uri= http://localhost:13526/Redirect

Einstellungen der Abfragezeichenfolge für die Power BI-Authentifizierung

Einstellung Beschreibung
response_type=code Azure AD gibt einen Autorisierungscode zurück.
client_id=1861585d...9a79c296 Die Anwendung identifiziert sich mithilfe der Client-ID bei den Benutzern, von denen sie Berechtigungen anfordert. Sie erhalten die Client-ID bei der Registrierung Ihrer Azure-Anwendung.
resource= https://analysis.windows.net/powerbi/api Der Ressourcen-URI für die zu autorisierende Power BI-Ressource. Wichtig ist, dass Sie den exakten URI verwenden.
redirect_uri= http://localhost:13526/Redirect Nachdem sich der Benutzer authentifiziert hat, wird er von Azure AD zur Web-App zurückgeleitet.

Dieses C#-Codebeispiel zeigt, wie Sie eine Autorisierungs-URL für Azure AD mit einer Abfragezeichenfolge erstellen und zum Zertifizierungsstellendienst von Azure AD umleiten.

Beispiel: C#-Anmeldung

    protected void signInButton_Click(object sender, EventArgs e)
    {
        //Create a query string
        //Create a sign-in NameValueCollection for query string
        var @params = new NameValueCollection
        {
            //Azure AD will return an authorization code.
            //See the Redirect class to see how "code" is used to AcquireTokenByAuthorizationCode
            {"response_type", "code"},

            //Client ID is used by the application to identify themselves to the users that they are requesting permissions from.
            //You get the client id when you register your Azure app.
            {"client_id", Properties.Settings.Default.ClientID},

            //Resource uri to the Power BI resource to be authorized
            {"resource", "https://analysis.windows.net/powerbi/api"},

            //After user authenticates, Azure AD will redirect back to the web app
            {"redirect_uri", "http://localhost:13526/Redirect"}
        };

        //Create sign-in query string
        var queryString = HttpUtility.ParseQueryString(string.Empty);
        queryString.Add(@params);

        //Redirect authority
        //Authority Uri is an Azure resource that takes a client id to get an Access token
        string authorityUri = "https://login.windows.net/common/oauth2/authorize/";
        Response.Redirect(String.Format("{0}?{1}", authorityUri, queryString));       
    }

Schritt 4: Abrufen eines Azure AD-Zugriffstokens mithilfe des Autorisierungscodes

Um eine Datenanforderung an den Power BI-REST-Dienst zu stellen, müssen Sie ein Zugriffstoken angeben. In einer .NET-Web-App verwenden Sie das NuGet-Paket mit der Azure AD-Authentifizierungsbibliothek für .NET, um ein Zugriffstoken abzurufen. Wenn Sie keine Azure AD-Authentifizierungsbibliothek (Active Directory Authentication Library; ADAL) haben, finden Sie weitere Informationen unter Hinzufügen einer Azure Active Directory-Authentifizierungsbibliothek.

Nachdem die App an den Zertifizierungsstellen-URI für Azure AD umgeleitet wurde und einen Autorisierungscode erhalten hat, ruft sie ein Token nach Autorisierungscode ab. So ruft Ihre App den Autorisierungscode und ein Zugriffstoken ab: In einer Umleitungsklasse:

  1. Rufen Sie den von Azure AD zurückgegebenen Azure AD-Autorisierungscode ab.

    string code = Request.Params.GetValues(0)[0];
    
  2. Erstellen Sie einen AuthenticationContext , indem Sie den Zertifizierungsstellen-URI und einen TokenCache übergeben.

    TokenCache TC = new TokenCache();
    
    AuthenticationContext AC = new AuthenticationContext(authorityUri, TC);
    
  3. Erstellen Sie ClientCredential -Informationen, indem Sie die Client-ID und den geheimen Clientschlüsselder Azure-App übergeben.

    ClientCredential cc = new ClientCredential(Properties.Settings.Default.ClientID, Properties.Settings.Default.ClientSecretKey);
    
  4. Rufen Sie ein Token nach Autorisierungscode ab, indem Sie den von Azure AD zurückgegebenen Authentifizierungscode und eine Umleitungs-URLübergeben.

    AuthenticationResult AR = AC.AcquireTokenByAuthorizationCode(code, new Uri(redirectUri), cc);
    
  5. Umleiten zurück zu default.aspx.

    Response.Redirect("/Default.aspx");
    
  6. Setzen Sie die Indexzeichenfolge "authResult" einer Sitzung auf "AuthenticationResult", sodass Sie das Ergebnis auf der Seite "default.aspx" verwenden können.

    Session["authResult"] = AR;
    

Führen Sie auf der Seite "Default.aspx" folgenden Schritt aus:

  1. Rufen Sie ein AuthenticationResult der Sitzung ab. Verwenden Sie in Schritt 4 das AuthenticationResult , um ein AccessTokenfür die Autorisierung abzurufen.

    AuthenticationResult authResult = (AuthenticationResult)Session["authResult"];
    

Hier sehen Sie den vollständigen Code zum Abrufen eines Azure-Zugriffstokens nach Autorisierungscode und zum Umleiten an default.aspx.

Hinweis Der Umleitungs-URI muss beim Anfordern von Autorisierungscode mit dem Parameter "redirect_uri" übereinstimmen.

public partial class Redirect : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
      //Redirect uri must match the redirect_uri used when requesting Authorization code.
      string redirectUri = "http://localhost:13526/Redirect";
      string authorityUri = "https://login.windows.net/common/oauth2/authorize/";

      // Get the auth code
      string code = Request.Params.GetValues(0)[0];

      // Get auth token from auth code       
      TokenCache TC = new TokenCache();

      AuthenticationContext AC = new AuthenticationContext(authorityUri, TC);
      ClientCredential cc = new ClientCredential
          (Properties.Settings.Default.ClientID,
          Properties.Settings.Default.ClientSecret);

      AuthenticationResult AR = AC.AcquireTokenByAuthorizationCode(code, new Uri(redirectUri), cc);

      //Set Session "authResult" index string to the AuthenticationResult
      Session["authResult"] = AR;

      //Redirect back to Default.aspx
      Response.Redirect("/Default.aspx");
  }
}

public partial class _Default : Page
{
  public AuthenticationResult authResult { get; set; }
  string baseUri = "https://api.powerbi.com/beta/myorg/";

  protected void Page_Load(object sender, EventArgs e)
  {

      //Test for AuthenticationResult
      if (Session["authResult"] != null)
      {
          //Get the authentication result from the session
          authResult = (AuthenticationResult)Session["authResult"];

          //Show Power BI Panel
          signInStatus.Visible = true;

          //Set user and token from authentication result
          userLabel.Text = authResult.UserInfo.DisplayableId;
          accessTokenTextbox.Text = authResult.AccessToken;
      }
  }

  ...
}

Schritt 5: Aufrufen eines Power BI-Vorgangs mithilfe des Azure AD-Zugriffstokens

Aufrufe der Power BI-REST-API erfolgen im Namen eines authentifizierten Benutzers. Dabei wird im Autorisierungsheader ein Zugriffstoken übermittelt, das über Azure Active Directory abgerufen wurde. Nachdem Sie ein Zugriffstoken von Active Directory (AAD) erhalten haben, stellen Sie damit eine Webanforderung an die Power BI-REST-API.

Sobald Sie durch Anfordern eines Tokens nach Autorisierungscode (AcquireTokenByAuthorizationCode) ein AuthenticationResult festgelegt haben, erhalten Sie durch Abrufen der Eigenschaft AccessToken von AuthenticationResult ein Azure-Zugriffstoken. Mit diesem Code rufen Sie Datasetsfür Power BI ab. Der Beispielcode erstellt eine Instanz von WebRequest und deserialisiert die Antwortzeichenfolge als Dataset. Für den Zugriff auf die Power BI-REST-API erstellen Sie einen Anforderungsheader und setzen "Autorisierung" auf "Träger {AccessToken}":

request.Headers.Add("Authorization", String.Format("Bearer {0}", authResult.AccessToken));

C#-Beispiel: Power BI-Datasets abrufen

    protected void getDatasetsButton_Click(object sender, EventArgs e)
    {
        string responseContent = string.Empty;

        //The resource Uri to the Power BI REST API resource
        string datasetsUri = "https://api.powerbi.com/v1.0/myorg/datasets";

        //Configure datasets request
        System.Net.WebRequest request = System.Net.WebRequest.Create(datasetsUri) as System.Net.HttpWebRequest;
        request.Method = "GET";
        request.ContentLength = 0;
        request.Headers.Add("Authorization", String.Format("Bearer {0}", authResult.AccessToken));

        //Get datasets response from request.GetResponse()
        using (var response = request.GetResponse() as System.Net.HttpWebResponse)
        {
            //Get reader from response stream
            using (var reader = new System.IO.StreamReader(response.GetResponseStream()))
            {
                responseContent = reader.ReadToEnd();

                //Deserialize JSON string
                //JavaScriptSerializer class is in System.Web.Script.Serialization
                JavaScriptSerializer json = new JavaScriptSerializer();
                Datasets datasets = (Datasets)json.Deserialize(responseContent, typeof(Datasets));

                resultsTextbox.Text = string.Empty;
                //Get each Dataset from
                foreach (dataset ds in datasets.value)
                {
                    resultsTextbox.Text += String.Format("{0}\t{1}\n", ds.Id, ds.Name);
                }
            }
        }
    }

public class Datasets
{
    public dataset[] value { get; set; }
}

public class dataset
{
    public string Id { get; set; }
    public string Name { get; set; }
}

Hinzufügen einer Azure Active Directory-Authentifizierungsbibliothek

In einer .NET-Client-App verwenden Sie AuthenticationContext in der Active Directory-Authentifizierungsbibliothek, um ein Azure-Zugriffstoken abzurufen. Sie können das NuGet-Paket für die Active Directory-Authentifizierungsbibliothek von Visual Studio installieren. Wenn Sie ein NuGet-Paket installieren, erstellt Visual Studio einen Verweis auf die erforderlichen Assemblys.

  1. Klicken Sie mit der rechten Maustaste auf eine Lösung.
  2. Wählen Sie "NuGet-Pakete verwalten".
  3. Suchen Sie die Active Directory-Authentifizierungsbibliothek.
  4. Wählen Sie in der Liste der Pakete die Active Directory-Authentifizierungsbibliothek aus, und klicken Sie auf "Installieren".

Siehe auch

NuGet-Paket mit der Azure AD-Authentifizierungsbibliothek für .NET
Active Directory-Authentifizierungsbibliothek (ADAL) v1 für .NET
OAuth 2.0 in Azure AD
Authorization Code Grant-Datenfluss
Authentifizierungsszenarien für Azure AD
Weitere Fragen? Wenden Sie sich an die Power BI-Community