以程式設計的方式為 Power BI 設定認證
適用於: 應用程式擁有資料 使用者擁有資料
若要以程式設計的方式為 Power BI 設定認證,請遵循本文中的步驟。 以程式設計的方式設定認證也可讓您對這些認證進行加密。
注意
- 呼叫使用者必須是語意模型擁有者或閘道管理員。您也可以使用服務主體。 例如,服務主體可以是語意模型擁有者。
- 雲端資料來源及其對應的認證會在使用者層級進行管理。
為資料來源更新認證流程
透過呼叫取得資料來源以探索語意模型的資料來源。 每個資料來源的回應本文都包含類型、連線詳細資料、閘道和資料來源識別碼。
// Select a datasource var datasources = pbiClient.Datasets.GetDatasources(datasetId).Value; var datasource = datasources.First();
根據更新資料來源範例建置認證字串。 認證字串的內容取決於認證的類型。
var credentials = new BasicCredentials(username: "username", password :"*****");
注意
如果使用的是雲端資料來源,請不要遵循本節中的後續步驟。 呼叫更新資料來源,以使用您在步驟 1 中取得的閘道識別碼和資料來源識別碼來設定認證。
透過呼叫取得閘道以擷取閘道公開金鑰。
var gateway = pbiClient.Gateways.GetGatewayById(datasource.GatewayId);
加密認證。
var credentialsEncryptor = new AsymmetricKeyEncryptor(gateway.publicKey);
使用加密的認證來建置認證詳細資料。
使用 AsymetricKeyEncryptor 類別搭配在步驟 3 中擷取的公開金鑰。
var credentialDetails = new CredentialDetails( credentials, PrivacyLevel.Private, EncryptedConnection.Encrypted, credentialsEncryptor);
透過呼叫更新資料來源來設定認證。
pbiClient.Gateways.UpdateDatasource(datasource.GatewayId.Value, datasource.DatasourceId.Value, new UpdateDatasourceRequest(credentialDetails));
為資料閘道設定新的資料來源
在您的電腦上安裝內部部署資料閘道。
透過呼叫取得閘道以擷取閘道識別碼和公開金鑰。
// Select a gateway var gateways = pbiClient.Gateways.GetGateways().Value; var gateway = gateways.First();
使用您在步驟 2 中擷取到的閘道公開金鑰,按照資料來源的更新認證流程一節中所述的程序來建置認證詳細資料。
建置要求本文。
var request = new PublishDatasourceToGatewayRequest( dataSourceType: "SQL", connectionDetails: "{\"server\":\"myServer\",\"database\":\"myDatabase\"}", credentialDetails: credentialDetails, dataSourceName: "my sql datasource");
呼叫 Create Datasource API。
pbiClient.Gateways.CreateDatasource(gateway.Id, request);
認證類型
當您從企業內部部署閘道上的 Power BI REST API 呼叫建立資料來源或更新資料來源時,請使用閘道公開金鑰來對認證值進行加密。
注意
.NET SDK v3 也可以執行以下 .NET SDK v2 範例。
Windows 與基本認證
// Windows credentials
var credentials = new WindowsCredentials(username: "john", password: "*****");
// Or
// Basic credentials
var credentials = new BasicCredentials(username: "john", password: "*****");
var credentialsEncryptor = new AsymmetricKeyEncryptor(publicKey);
var credentialDetails = new CredentialDetails(credentials, PrivacyLevel.Private, EncryptedConnection.Encrypted, credentialsEncryptor);
金鑰認證
var credentials = new KeyCredentials("TestKey");
var credentialsEncryptor = new AsymmetricKeyEncryptor(publicKey);
var credentialDetails = new CredentialDetails(credentials, PrivacyLevel.Private, EncryptedConnection.Encrypted, credentialsEncryptor);
OAuth2 認證
var credentials = new OAuth2Credentials("TestToken");
var credentialsEncryptor = new AsymmetricKeyEncryptor(publicKey);
var credentialDetails = new CredentialDetails(credentials, PrivacyLevel.Private, EncryptedConnection.Encrypted, credentialsEncryptor);
匿名認證
var credentials = new AnonymousCredentials();
var credentialDetails = new CredentialDetails(credentials, PrivacyLevel.Private, EncryptedConnection.NotEncrypted);
疑難排解
呼叫取得資料來源時未找到任何閘道和資料來源識別碼
此問題表示語意模型未繫結到閘道。 當您建立新的語意模型時,系統會在使用者的雲端閘道上為每個雲端連線自動建立一個沒有認證的資料來源。 雲端閘道用於儲存雲端連線的認證。
在您建立語意模型後,會在語意模型和合適的閘道之間建立自動繫結,其中包括所有連線的相符資料來源。 如果沒有合適的一或多個閘道,自動繫結便會失敗。
如果您使用的是內部部署語意模型,請建立缺少的內部部署資料來源,並使用繫結至閘道將語意模型手動繫結到閘道。
若要探索可繫結的閘道,請使用探索閘道。