无法使用SQL Server 2008 R2配置SSRS自定义身份验证扩展

Ste*_*eve 2 asp.net sql-server-2008-r2 reporting-services ssrs-2008

我一直致力于SSRS与我们的Web应用程序的SSO集成,但我无法让它工作.我已经按照MSFT的Clife Green的例子进行了操作,仍然无法使其工作:

Reporting Services单点登录(SSO)身份验证 - 第1部分

Reporting Services单点登录(SSO)身份验证 - 第2部分

我已经浏览了互联网并搜索了MSDN文档但仍无法使其工作.我不断得到的错误是从示例代码中抛出GetWebResponse是这样的:

Authorization ticket not received by LogonUser
Run Code Online (Sandbox Code Playgroud)

我能够通过来回传递自己的cookie来检查它,同时忽略SSRS管理的cookie,但是我所做的所有调用都返回为Unauthenticated,因为我没有使用在SSRS中返回的SSRS会话令牌. LogonUser可以在响应中找到:

response.Headers["RSAuthenticationHeader"]
Run Code Online (Sandbox Code Playgroud)

但是,即使我的Web服务调用继续工作,报表管理器也无法正常工作并返回此错误:

StringStartsWith can't accept null parameters
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 5

这是一个艰难的问题,并没有关于我遇到的问题的大量信息.有几件事是错的.

问题#1:报告管理器给了我这个错误:

StringStartsWith can't accept null parameters
Run Code Online (Sandbox Code Playgroud)

解决方案1:<loginUrl>实现在SSRS自定义或窗体身份验证时,标签是必需的.

我不得不修改RSReportServer.Config文件以将我的登录页面添加到<loginUrl>标记中.一旦我添加了这个并实现了Login页面(参见示例中的UILogin.aspx),我就不再遇到StringStartsWith错误.

文件位置:*C:\ Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\RSReportServer.Config*

<UI>
    <ReportServerUrl></ReportServerUrl>
    <PageCountMode>Estimate</PageCountMode>
    <CustomAuthenticationUI>
        <loginUrl>[YourUrl]</loginUrl>
        <UseSSL>False</UseSSL>
        <PassThroughCookies>
             <PassThroughCookie>[YourSSOCookieName]</PassThroughCookie>
        </PassThroughCookies>
    </CustomAuthenticationUI>
</UI>
Run Code Online (Sandbox Code Playgroud)

问题#2:报表管理器和我的登录页面无休止地重定向到彼此.

这个问题是由于另外两个问题.

解决方案#2A: SSRS报告管理器需要知道用于其授权凭证的cookie的名称.

首先,我必须修改报表服务器的Web.Config并告诉它用于其授权凭证的cookie的名称.我sqlAuthCookie在下面的例子中使用过.

文件位置:*C:\ Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\Web.Config*

更改:

      <authentication mode="Forms">
      <forms loginUrl="[YourUrl]" name="sqlAuthCookie" requireSSL="false" />
  </authentication>
Run Code Online (Sandbox Code Playgroud)

解决方案#2B: SQL Server 2008 R2有一个错误 - 服务补丁2修复了它.

我仍然得到无休止的重定向,因为SQL Server 2008 R2引入了它如何处理cookie的错误.简而言之,Report Manager的响应告诉您的应用程序响应标头中的SSRS身份验证cookie的名称:

string cookieName = response.Headers["RSAuthenticationHeader"]
Run Code Online (Sandbox Code Playgroud)

当我在这里设置断点时,我注意到cookie名称实际上是这样的:

sqlAuthCookie,sqlAuthCookie
Run Code Online (Sandbox Code Playgroud)

我做了一些搜索,发现了这个问题:SQL Server 2008 R2(11月CTP).表单身份验证在SSRS中不起作用

下载并安装SQL Server 2008 R2 SP2为我解决了这个问题,现在我的解决方案正常运行!

注意:您只需安装此代码而不是SP:SQL Server 2008 R2的累积更新包5