以编程方式登录到 SSRS


Programmatically Log Into SSRS

我正在尝试以编程方式连接到Microsoft SSRS。我假设这必须以某种方式使用 www-authentication http 标头来完成,但我并不完全确定。

我这样做是因为我在以匿名 Web 用户身份登录 SSRS 时遇到问题。 不应提示客户端输入用户名和密码。

假设我走在正确的道路上,一旦登录,PHP 应该充当 SSRS 作为客户端之间的中继(用户通过 PHP 页面浏览 SSRS)。

如果还有其他方法可以让它工作,请大喊大叫!

这就是我所走多远的程度:

<?php
    function get_url_contents($url){
        $crl = curl_init();
        $timeout = 5;
        curl_setopt ($crl, CURLOPT_VERBOSE, 1);
        curl_setopt ($crl, CURLOPT_URL,$url);
        curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($crl, CURLOPT_HTTPHEADER,array("WWW-Authenticate: Basic"));
        curl_setopt ($crl, CURLOPT_HEADER, 1);
        curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
        $ret = curl_exec($crl);
        curl_close($crl);
        return $ret;
    }

    $url = "http://192.168.0.16/ReportServer";
    $str = get_url_contents($url);
    echo $str;
?>

输出为:

C:'wamp'bin'php'php5.3.8>php.exe c:'wamp'www'Test'index.php
* About to connect() to 192.168.0.16 port 80 (#0)
*   Trying 192.168.0.16... * connected
* Connected to 192.168.0.16 (192.168.0.16) port 80 (#0)
> GET /ReportServer HTTP/1.1
Host: 192.168.0.16
Accept: */*
WWW-Authenticate: Basic
< HTTP/1.1 401 Unauthorized
< Content-Length: 0
< WWW-Authenticate: NTLM
< WWW-Authenticate: Basic realm="192.168.0.16"
< Date: Wed, 27 Jun 2012 06:31:24 GMT
<
* Connection #0 to host 192.168.0.16 left intact
HTTP/1.1 401 Unauthorized
Content-Length: 0
WWW-Authenticate: NTLM
WWW-Authenticate: Basic realm="192.168.0.16"
Date: Wed, 27 Jun 2012 06:31:24 GMT
* Closing connection #0
C:'wamp'bin'php'php5.3.8>

因此,如果我没记错的话,SSRS 在开箱即用时"默认"为 NTLM。这意味着它正在寻找一个Windows AD帐户。当然,您可以根据您的用例将这些设置通过配置更改为无数其他设置。有关身份验证的更多信息,请查看此页面:http://msdn.microsoft.com/en-us/library/bb283249.aspx

很久以前,我做过一个类似的项目。我们最终使用的最简单的解决方案是创建一个服务帐户,将 PHP 应用程序中使用的各种 SSRS 报告的权限授予服务帐户,然后在 .NET 端实质上创建一个包装器 Web 服务,将 SSRS Web 服务称为服务帐户。然后我们从 PHP 端调用这个包装器 Web 服务。有关 SSRS Web 服务的信息,请参阅此处:http://msdn.microsoft.com/en-us/library/ms155398.aspx

希望这有帮助...