如何使用非交互式身份验证连接到 Power BI API?

2024-01-12

用 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 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);

to

var result = authenticationContext.AcquireToken(resource: **"https://analysis.windows.net/powerbi/api"**, clientCredential: credential);

您想要获取 power bi api 的令牌。

希望有帮助。

编辑根据OP评论更新答案:

这是您需要做的。

在 Azure AD 中创建一个“本机应用程序”并获取该客户端 ID,其中不会有任何秘密。

确保您拥有 Nuget Active Directory 身份验证库 2.23.302261847 中的最新版本 ADAL

您将需要使用此获取令牌重载:

authContext.AcquireToken("https://analysis.windows.net/powerbi/api", clientID, new UserCredential(<Username>, <Password>));

编辑:2016-11-11

阿达尔3.13.7UserCredentail 不再具有上面定义的构造函数。有一个新的密封类 UserPasswordCredential

public sealed class UserPasswordCredential : UserCredential

其中具有与以前的 UserCredential 对象匹配的构造函数

public UserPasswordCredential(string userName, string password)

您可以通过执行以下操作获取令牌:

authContext.AcquireToken("https://analysis.windows.net/powerbi/api", clientID, new UserPasswordCredential(<Username>, <Password>));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用非交互式身份验证连接到 Power BI API? 的相关文章

随机推荐

  • 如何使用订阅者选项?

    我现在开始使用 Pubsubhubbub 以及所有关于实时的东西 但我在使用订阅者选项时遇到了问题 我正在尝试用 PHP 开发一个网络应用程序 订阅 RSS 之前发布的 到 Hub http pubsubhubbub appspot com
  • object() == object() 保证为 False 吗?

    假设我创建了两个类的实例object 这两个实例是否保证彼此不相等 换句话说 就是object object 保证是False 还是依赖于实现 我明白那个object is object 保证是False 但我在这里问的是object ob
  • K-means 仅使用特定数据帧列与 scikit-learn

    我正在使用k means算法从scikit learn库 我想要聚类的值位于具有 3 列的 pandas 数据框中 ID value 1 and value 2 我想使用以下方法对信息进行聚类value 1 and value 2 但我也想
  • 如何在 16 位 x86 实模式下通过 BIOS 访问 USB 端口?

    我是装配世界的新手 我正在尝试编写一些汇编代码来与串行 并行 VGA 键盘等硬件设备进行通信 我在 x86 intel 处理器的实模式下执行此操作 通过从我亲自编写的用于加载汇编代码的 boostrap 启动我的代码 嗯 根据我从阅读教程中
  • std::string::c_str 和 std::string::data 之间有什么区别? [复制]

    这个问题在这里已经有答案了 为什么我想打电话std string data http www cppreference com wiki string data over std string c str http www cpprefer
  • 在 OS X 中安装 Mono Framework 的正确方法

    在已经安装了旧版本 例如 2 10 4 的情况下 是否有正确的方法来安装新版本的 Mono 例如 2 10 5 可以遵循哪条路 卸载旧版本 然后安装新版本 用新版本覆盖旧版本 先感谢您 只需安装即可 不用担心 框架支持多个版本 您最终将获得
  • React JS 在另一个组件中引用函数

    我试图获取通过另一个组件呈现的按钮来引用和 或影响不同组件的状态 var Inputs React createClass getInitialState function return count 1 add function this
  • 将 Facebook 登录添加到 ionic 应用程序

    我也是 Angular 和 Ionic 的新手 尝试了以下教程 https www sitepoint com how to integrate facebook login into a cordova based app https w
  • 调用静态方法的实例

    再会 我有点困惑 我想使用日历 所以我在互联网上搜索它并遇到以下代码 Ca1endar c Calendar getlnstance c set 2011 2 5 1 25 但我了解到这是一个静态方法 Calendar getlnstanc
  • NPOI 数据格式

    我正在使用 NPOI v1 2 3 导出网格 但在使单元格格式正常工作时遇到问题 我有一个类将对象列表导出到 XLS 文件 为每个对象创建一行 并为每个配置的属性添加一个单元格 可以在每个属性级别设置单元格数据格式 我读过您不应该为每个单元
  • Clojure 环包装重新加载不起作用

    这是我的 core clj 文件 ns lein app core require compojure core refer all compojure route as route ring middleware reload refer
  • 在 mac osx leopard/snow leopard 中获取鼠标光标下的文本

    有什么想法可以让文本位于鼠标光标下吗 我正在尝试构建一个字典应用程序 当鼠标悬停在单词上时会弹出一个翻译面板 我查看了可访问性API 它只能找到当前的ui元素 但不能找到当前的单词 我最后的选择是经常截图 然后进行ocr 这会消耗CPU 我
  • 如何设置内存存储库

    我有以下课程 public class InMemoryRepository IRepository public void Add object entity throw new NotImplementedException publi
  • 使用 GitHub 页面,空白屏幕

    我正在尝试使用 username github io 在 github 页面上创建一个 React 项目 但是当我打开链接时 它只返回一个白屏 没有任何错误消息 当我使用自定义域名时也会发生这种情况 但是 当我在本地运行它以及使用 gh p
  • iOS:我可以检测设备屏幕是否打开/关闭吗?

    如何在 iOS 中检查屏幕是打开还是关闭 我想知道屏幕当前是否打开 即使我的应用程序在后台 我想要一个事件侦听器 谢谢 In Swift 3你可以做 override func viewDidLoad super viewDidLoad O
  • 使用 Core Data 时如何正确设置 NSPredicate 来实现一对多关系?

    我有一个核心数据模型 其中任务实体包含与 ExcludedDay 实体的可选对多关系 ExcludedDays ExcludedDay 的属性之一是 day 它是一个 NSDate 对象 ExcludedDay 实体与 Task 实体具有反
  • JDBC 和 SQL Server 连接问题

    我对 Java 很陌生 我是一个纯粹的 net 人 我正在尝试进行 SQL Server 2008 数据库连接 现在我正在使用 jTDS 驱动程序来完成我的工作 db dbConnect jdbc jtds sqlserver XXXXXX
  • 原因及解决方法如何-[__NSCFConstantString trim]? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我用j2objc 从 爪哇 到obj
  • 消息正文上的 Azure 服务总线订阅筛选器

    我想根据消息的内容创建订阅 这可能吗 我试图摆脱添加自定义属性的麻烦 谢谢 这是不可能的 订阅只能根据标准 系统 和自定义 用户 属性进行过滤 如果正文 有效负载中有需要参与过滤的数据 则需要将其提升到标头
  • 如何使用非交互式身份验证连接到 Power BI API?

    用 C 编码 我正在遵循本指南 https azure microsoft com en us documentation articles resource group authenticate service principal aut