下載 .NET 用戶端應用程式範例 | 檢視 GitHub 上的程式碼

本文示範如何驗證 Power BI 用戶端應用程式。 其中包含 C# 範例;不過,這個驗證程序也適用於其他程式語言。

如需示範如何驗證 Power BI 用戶端應用程式的完整 C# 範例,請參閱用戶端應用程式範例

Power BI 用戶端應用程式使用 Azure Active Directory (AAD) 來驗證使用者及保護應用程式。 驗證是識別應用程式或使用者的程序。 若要在 AAD 中識別您的用戶端應用程式,請在 AAD 中註冊應用程式。 當您在 AAD 中註冊用戶端應用程式時,即會將應用程式存取權授與 Power BI API。 若要了解如何註冊 Power BI 用戶端應用程式,請參閱註冊用戶端應用程式

系統會在要求的「授權」標頭中傳遞權杖,以代表驗證的使用者呼叫 Power BI REST API。 這個權杖是透過 Azure Active Directory 所取得。

注意 在 Power BI Private Preview 中,會使用 Azure 管理入口網站將應用程式建立成多租用戶應用程式。

驗證 Power BI 用戶端應用程式的必要條件

若要驗證的 Power BI 用戶端應用程式並執行 REST Web 要求,您需要:

  1. 註冊用戶端應用程式 - 若要註冊 Power BI 用戶端應用程式,請參閱註冊用戶端應用程式。 當您在 Azure Active Directory 中註冊用戶端應用程式時,即會將應用程式存取權授與 Power BI API。
  2. 指派應用程式的用戶端識別碼 -若要取得應用程式的用戶端識別碼,請參閱如何取得用戶端應用程式識別碼。 應用程式使用這個用戶端識別碼,向要求權限的使用者識別自己的身分。
    • 在您的用戶端應用程式程式碼中,將 clientID 變數指派給 Azure 應用程式的用戶端識別碼。
  3. 指派重新導向 URI - 在用戶端應用程式中,重新導向 URI 會提供 AAD 所要驗證之特定應用程式的詳細資訊。 統一資源識別碼 (URI) 是用來識別資源名稱的值。

    • 在用戶端應用程式程式碼中,將 redirectUri 指派給 "https://login.live.com/oauth20_desktop.srf"。 由於用戶端應用程式並沒有要重新導向的外部服務,因此這個 URI 是用戶端應用程式的標準預留位置。
  4. 指派 Power BI API 的資源 URI - 此資源 URI 可識別 Power BI API 資源。

    • 在您的用戶端應用程式程式碼中,將 resourceUri 指派給 "https://analysis.windows.net/powerbi/api"。
  5. 指派 OAuth2 授權單位 URI - 此授權單位 URI 可識別 OAuth2 授權單位資源。

    • 在您的用戶端應用程式程式碼中,將授權單位 URI 指派給 "https://login.windows.net/common/oauth2/authorize"。
  6. 指派 Power BI API 資料集的資料集 URI - 資料集 URI 可識別 Power BI API 資料集資源。

    • 在您的用戶端應用程式程式碼中,將 datasetsUri 指派給 "https://api.powerbi.com/v1.0/myorg/datasets"。

若要向 Power BI REST 服務提出資料要求,您需要提供存取權杖。 在 .NET 用戶端應用程式中,您可以使用適用於 .NET nuget 套件的 Azure AD 驗證程式庫取得存取權杖。 以下說明程序。 以下是 AccessToken() 方法的範例。

若您沒有 Windows Azure 驗證程式庫 (ADAL),請參閱如何新增 Azure Active Directory 驗證程式庫

重要若要驗證用戶端應用程式,您必須將參考加入至隨附於 Windows Azure 驗證程式庫 (ADAL) 的 Microsoft.IdentityModel.Clients.ActiveDirectory

取得存取權杖的步驟

  1. 建立 AuthenticationContext 的執行個體 - AuthenticationContext 是代表 Azure AD 資源之權杖發行授權單位的主要類別。 這個建構函式使用:

    • 一個 OAuth2 authorityUri
            //OAuth2 authority Uri
            string authorityUri = "https://login.windows.net/common/oauth2/authorize";
    AuthenticationContext  authContext = new AuthenticationContext(authorityUri);
    
  2. 呼叫 AuthenticationContext.AcquireToken() 以取得權杖 - 此方法採用:

    • Power BI API resourceUri
    • 您的 Power BI 應用程式 clientID
    • 您的 Power BI 應用程式 redirectUri
    string token = authContext.AcquireToken(resourceUri, clientId, new Uri(redirectUri), PromptBehavior.RefreshSession).AccessToken;
    

如需 AuthenticationContext 取得權杖方法的詳細資訊,請參閱 Azure 驗證內容流程

C# 範例 - 取得存取權杖

在 .NET 用戶端應用程式中,您可以使用 AuthenticationContext 取得存取權杖。

      static string AccessToken()
      {
            //Get access token:
            // To call a Power BI REST operation, create an instance of AuthenticationContext and call AcquireToken
            // AuthenticationContext is part of the Active Directory Authentication Library NuGet package
            // To install the Active Directory Authentication Library NuGet package in Visual Studio,
            //  run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console.

            //Resource Uri for Power BI API
            string resourceUri = "https://analysis.windows.net/powerbi/api";

            string clientId = {clientIDFromAzureAppRegistration};

            //A redirect uri gives AAD more details about the specific application that it will authenticate.
            //Since a client app does not have an external service to redirect to, this Uri is the standard placeholder for a client app.
            string redirectUri = "https://login.live.com/oauth20_desktop.srf";

            // Create an instance of AuthenticationContext to acquire an Azure access token
            // OAuth2 authority Uri
            string authorityUri = "https://login.windows.net/common/oauth2/authorize";
            AuthenticationContext authContext = new AuthenticationContext(authorityUri);

            // Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint
            //  AcquireToken takes a Client Id that Azure AD creates when you register your client app.
            //  To learn how to register a client app and get a Client ID, see https://msdn.microsoft.com/library/dn877542(Azure.100).aspx   
            string token = authContext.AcquireToken(resourceUri, clientID, new Uri(redirectUri)).AccessToken;

            return token;
      }

使用權杖向 Power BI API 提出資料要求

從 Active Directory (AAD) 取得存取權杖之後,使用該權杖向 Power BI REST API 提出 Web 要求。 若要建立 Power BI REST Web 要求,請依照下列方式將存取權杖加入要求標頭:

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

C# 範例 - 使用權杖的 Power BI REST API 資料要求

如需示範如何驗證 Power BI 用戶端應用程式和呼叫所有 Power BI REST 作業的完整 C# 範例,請參閱用戶端應用程式範例在 GitHub 上檢視程式碼

        static dataset[] GetDatasets()
        {
            //This is sample code to illustrate a Power BI operation.
            //In a production application, refactor code into specific methods and use appropriate exception handling.

            //Power BI Datasets Url
            string powerBIApiUrl = "https://api.powerbi.com/v1.0/myorg/datasets";

            //Get Azure AD access token (see above)
            string token = AccessToken();

            //GET web request to list all datasets.
            //To get a datasets in a group, use the Groups uri: https://api.PowerBI.com/v1.0/myorg/groups/{group_id}/datasets
            HttpWebRequest request = System.Net.WebRequest.Create(powerBIApiUrl) as System.Net.HttpWebRequest;
            request.KeepAlive = true;
            request.Method = "GET";
            request.ContentLength = 0;
            request.ContentType = "application/json";

            //Add access token to Request header
            request.Headers.Add("Authorization", String.Format("Bearer {0}", token));

            //Get HttpWebResponse from GET request
            using (HttpWebResponse httpResponse = request.GetResponse() as System.Net.HttpWebResponse)
            {
                //Get StreamReader that holds the response stream
                using (StreamReader reader = new System.IO.StreamReader(httpResponse.GetResponseStream()))
                {
                    string responseContent = reader.ReadToEnd();

                    JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
                    Datasets datasets = (Datasets)jsonSerializer.Deserialize(responseContent, typeof(Datasets));

                    return datasets.value;
                }
            }
        }

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

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

Azure 驗證內容流程

在 .NET 用戶端應用程式中,您可以使用 AuthenticationContext 取得 Azure 存取權杖。 AuthenticationContext 是代表 Azure AD 資源之權杖發行授權單位的主要類別。 AuthenticationContext 會執行下列作業:

  1. AuthenticationContext 將使用者代理程式重新導向至 Azure Active Directory 授權端點,以啟動流程。 使用者驗證並同意 (如果需要同意的話)。

  2. Azure Active Directory 授權端點將使用者代理程式重新導向回到 AuthenticationContext,並提供一個授權碼。 使用者代理程式將授權碼傳回用戶端應用程式的重新導向 URI。

  3. AuthenticationContext 向 Azure Active Directory 權杖發行端點要求存取權杖。 它會提供授權碼,證明使用者已經同意。

  4. Azure Active Directory 權杖發行端點傳回存取權杖。

  5. 用戶端應用程式使用這個存取權杖對 Web API 進行驗證。

  6. 驗證用戶端應用程式之後,Power BI REST API 會傳回要求的資料。

如需深入了解 Azure Active Directory (Azure AD) 授權流程,請參閱授權碼授與流程

如何新增 Azure Active Directory 驗證程式庫

在 .NET 用戶端應用程式中,您可以使用 Active Directory 驗證程式庫 中的 AuthenticationContext 取得 Azure 存取權杖。 您可以安裝 Visual Studio 所提供的 Active Directory 驗證程式庫 NuGet 封裝。 當您安裝 NuGet 封裝時,Visual Studio 會建立必要組件的參考。

  1. 以滑鼠右鍵按一下方案。

  2. 選擇 [管理 NuGet 封裝] 。

  3. 搜尋 Active Directory 驗證程式庫

  4. 從封裝清單中選擇 Active Directory 驗證程式庫 ,然後按一下 [安裝] 。

另請參閱

適用於 .NET NuGet 套件的 Azure AD Authentication Library
適用於 .NET 的 Active Directory Authentication Library (ADAL) v1
Azure AD 中的 OAuth 2.0
授權碼授與流程
Azure AD 的驗證案例
有其他問題嗎? 試試 Power BI 社群