如何使用非交互式身份validation连接到Power BI API?
用C#编码。 我正在遵循这个指南:
https://azure.microsoft.com/en-us/documentation/articles/resource-group-authenticate-service-principal/#authenticate-service-principal-with-password—powershell%E2%80%8C%E2 %80%8B
但它不起作用而且不是Power BI特定的,因此我不确定如何将其应用于Power BI API。
在我尝试连接到Power BI时,我收到403 Forbidden响应。
var authenticationContext = new AuthenticationContext("https://login.windows.net/" + Properties.Settings.Default.TenantID); var credential = new ClientCredential(clientId: Properties.Settings.Default.ClientID, clientSecret: Properties.Settings.Default.ClientSecretKey); var result = authenticationContext.AcquireToken(resource: "https://management.core.windows.net/", clientCredential: credential); if (result == null) { throw new InvalidOperationException("Failed to obtain the JWT token"); } string accessToken = result.AccessToken; 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.Timeout = 20000; request.Method = "GET"; request.ContentLength = 0; request.Headers.Add("Authorization", String.Format("Bearer {0}", accessToken)); try { //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); } } } } catch (WebException wex) { resultsTextbox.Text = wex.Message; } }
尝试更改资源URI:
var result = authenticationContext.AcquireToken(resource: "https://management.core.windows.net/", clientCredential: credential);
至
var result = authenticationContext.AcquireToken(resource: **"https://analysis.windows.net/powerbi/api"**, clientCredential: credential);
您想获取power bi api的令牌。
希望有帮助。
编辑基于OP评论更新答案:
这是你需要做的。
在Azure AD中创建一个“本机应用程序”并获取该客户端ID将没有秘密。
确保您拥有Nuget Active Directory身份validation库2.23.302261847的最新版ADAL
您将需要使用此获取令牌重载:
authContext.AcquireToken("https://analysis.windows.net/powerbi/api", clientID, new UserCredential(, ));
编辑:2016-11-11
ADAL 3.13.7 UserCredentail不再具有上面定义的构造函数。 有一个新的密封类UserPasswordCredential
public sealed class UserPasswordCredential : UserCredential
其中包含与以前的UserCredential对象匹配的构造函数
public UserPasswordCredential(string userName, string password)
您可以通过执行以下操作获取令牌:
authContext.AcquireToken("https://analysis.windows.net/powerbi/api", clientID, new UserPasswordCredential(, ));
PowerBI网站上有学费: https ://powerbi.microsoft.com/en-us/documentation/powerbi-developer-what-you-need-to-create-an-app/。
本文详细指导了如何创建PowerBI Web应用程序,包括在Azure AD中注册应用程序以及如何获取ClientID。 这些步骤不难理解和遵循。 如果您需要,请告诉我。 如果您有任何疑问,请保持联系。
此页面中有一个简单的示例: https : //powerbi.microsoft.com/en-us/documentation/powerbi-developer-authenticate-a-web-app/
- 在.NET安全实践中使用Thread.Abort()并处理ThreadAbortException?
- 使用Kudu在Azure上部署ASP.NET vNext beta 2
- 已发布的C#Bot在一段时间后会遇到内部服务器错误
- 在Azure表存储中更新RowKey或PartitionKey
- Azure rest api put blob
- 按DocumentDB中的字段分组
- 如何在Redis缓存中存储列表元素
- 通过Xamarin将video上传到Azure存储
- Azure WebSites或Azure云服务上的MVC4 API :’System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption’