5

我目前在使用 SSRS 时遇到了一些问题。我有一个使用 Windows 身份验证的 ASP.NET 网站。这很好,我知道网站当前用户是当前登录的用户。

在这个站点上有一个 webforms ReportViewer。当我不设置凭据时,这可以正常工作。但是查看 SQL Server 中报告的执行日志,用户名被列为 DOMAIN\MACHINE。

我尝试将 ReportServerCredentials 属性设置为如下所示的类:

[Serializable]
public class ReportCredentials : IReportServerCredentials   
{

    public bool GetFormsCredentials(out Cookie authCookie, out string userName, out string password, out string authority)
{
    authCookie = null;
    userName = null;
    password = null;
    authority = null;

    return false;
}

public WindowsIdentity ImpersonationUser
{
    get {
        return (WindowsIdentity)HttpContext.Current.User.Identity;
    }
}

public ICredentials NetworkCredentials
{
    get {
        return null;
    }
}

}

但是,当执行此代码时,我现在从 Web 服务和报告服务返回 401。

这是怎么回事?他们都在同一个域上。我想使用当前用户而不是当前机器。如果我在报告服务器上运行报告,它会在正确的用户名下列出,而不是来自我的网站。

4

2 回答 2

4

我在这里遇到了自己的麻烦,但最终成功了。

机器1:客户端浏览器

机器 2:网络服务器

机器 3:SSRS + SQL Server

为了解决双跳,我让 IT 部门为 Machine2 启用 Active Directory 委派,设置为“信任此计算机以委派给任何服务(仅限 Kerberos)”。

在我的网络服务器上,我将 Web.config 文件修改为:

 <authentication mode="Windows"/>
 <identity impersonate="true"/>

在 SSRS 服务器上,我修改了 rsreportserver.config 文件,添加<RSWindowsNegotiate/>到该<AuthenticationTypes>部分。我相信默认是<RSWindowsNTLM/>. 我只是把两个都留在那里,给了我:

我重新启动了 SSRS 服务器并开始工作。

希望这对某人有帮助!

于 2013-03-20T22:25:24.127 回答
0

代替

return (WindowsIdentity)HttpContext.Current.User.Identity;

你可以试试

return WindowsIdentity.GetCurrent();
于 2012-10-04T16:01:38.623 回答