.net 嵌入PowerBI报表服务器报表时处理身份验证

.net 嵌入PowerBI报表服务器报表时处理身份验证,.net,authentication,reporting-services,webbrowser-control,powerbi,.net,Authentication,Reporting Services,Webbrowser Control,Powerbi,我正在尝试将承载在PowerBI报表服务器上的报表嵌入到WebBrowser控件中 我使用以下形式的url: reportserver.server.com/reports/powerbi/TestReport?rs:embed=true () 这可以工作,但是会提示进行Active Directory身份验证, 通过浏览器: 在我的申请中: 如果我输入凭证,一切正常。但是,我希望以编程方式进行身份验证。 在url中包括凭据,如下所示: 用户:password@reportserver.se

我正在尝试将承载在PowerBI报表服务器上的报表嵌入到
WebBrowser
控件中

我使用以下形式的url:

reportserver.server.com/reports/powerbi/TestReport?rs:embed=true

()

这可以工作,但是会提示进行Active Directory身份验证,
通过浏览器:

在我的申请中:

如果我输入凭证,一切正常。但是,我希望以编程方式进行身份验证。
在url中包括凭据,如下所示:
用户:password@reportserver.server.com/报告/powerbi/TestReport?rs:embed=true

在浏览器中工作,但会显示确认对话框:

但是,在应用程序的WebBrowser中,它没有,而是显示以下内容:

此页面立即加载。链接是
https://go.microsoft.com/fwlink/?linkid=847142
(“配置报表服务器数据库连接(SSRS配置管理器)”)。我认为这篇文章不相关

有没有一种方法可以在不禁用报表服务器上的身份验证的情况下以编程方式进行身份验证

我的代码很简单:

var url = new Uri(@"user:password@reportserver.server.com/reports/powerbi/TestReport?rs:embed=true");
webBrowser1.Navigate(url);
尝试在标题中传递凭据会导致出现空白页,并且似乎什么也没有发生:

var url = new Uri(@"reportserver.server.com/reports/powerbi/TestReport?rs:embed=true");
string auth = System.Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(username + ":" + password));
string headers = "Authorization: Basic " + auth + "\r\n";
webBrowser1.Navigate(url, "", null, headers);

发现了一个丑陋的解决方法,如果其他人认为这很有用,那么就发布,但是不会接受这个答案,因为他们仍然更喜欢“干净”的解决方案

如果您首先导航到具有凭据的url,然后导航到不具有凭据的url,则此操作有效:

private string justUrl { get { return urlPrefix + url; } }
private string urlWithCreds { get { return urlPrefix + username + ":" + password + "@" + url ; } }
private void button1_Click(object sender, EventArgs e)
{
    var url1 = new Uri(urlWithCreds);
    webBrowser1.Navigated += WebBrowser1_Navigated; // one-time
    webBrowser1.Navigate(url1);
}
private void WebBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
    webBrowser1.Navigated -= WebBrowser1_Navigated;
    webBrowser1.Navigate(justUrl);
}