我正在尝试在SSRS 2008(而不是R2)中实现一些自定义安全代码,以允许表单身份验证而不是Windows身份验证。我已经将我的解决方案基于Microsoft示例代码,并且已经设法使大部分工作完全正常。我遇到问题的唯一区域是登录实际的Report Manager URL。
第1期
使用网址http://localhost/Reports_MSSQL2008/
时,它不会选择我已复制到UILogon.aspx
文件夹中的/Pages
页面(按照Microsoft示例的说明)。我修改了ReportManager文件夹中的web.config以包含以下内容:
<authentication mode="Forms">
<forms loginUrl="UILogon.aspx"
name="sqlAuthCookie"
timeout="60"
slidingExpiration="true"
path="/" />
</authentication>
我已经尝试更改路径以匹配aspx文件的确切路径,但仍然没有快乐!
第2期
由于上述问题,我尝试通过URL http://localhost/Reports_MSSQL2008/Pages/UILogon.aspx
进入UILogon和ReportManager。这是因为我可以进入我的自定义代码(UILogon.aspx.cs和IAuthorisation / IAuthentication代码),我可以看到它执行以下操作:
问题是,当response.redirect返回到GetUserInfo()方法时,HttpContext.Current.User为null,并且不再有cookie。因此,返回null IIdentity(无法将其设置为其他任何内容!!)并且SSRS会抛出错误...
Microsoft.ReportingServices.Diagnostics.Utilities.AuthenticationExtensionException:
身份验证扩展会引发意外异常或返回无效的值:identity == null。
有关信息 - 当我启动Report Builder / Visual Studio bi proj / Web服务URL时,它完全符合我的要求并且工作正常......它只是导致问题的报表管理器。
答案 0 :(得分:4)
我现在已经解决了....我必须将以下内容添加到rsreportserver.config:
<UI>
<CustomAuthenticationUI>
<loginUrl>/Pages/UILogon.aspx</loginUrl>
<UseSSL>false</UseSSL>
</CustomAuthenticationUI>
<ReportServerUrl></ReportServerUrl>
<PageCountMode>Estimate</PageCountMode>
</UI>
并且只在web.config中包含以下内容:
<authentication mode="Forms" />
另外,为了安全防范从GetUserInfo()传回的空身份,我编写了以下代码:
public void GetUserInfo(out IIdentity userIdentity, out IntPtr userId)
{
//default the userIdentity
userIdentity = new GenericIdentity(WindowsIdentity.GetCurrent().Name);
// If the current user identity is not null,
// set the userIdentity parameter to that of the current user
if (HttpContext.Current != null
&& HttpContext.Current.User != null)
{
userIdentity = HttpContext.Current.User.Identity;
}
// initialize a pointer to the current user id to zero
userId = IntPtr.Zero;
}