如何将基本身份验证质询转发给报表管理器URL

时间:2012-06-25 16:34:09

标签: reporting-services sql-server-2008-r2 ssrs-2008

*底部描述了环境的详细信息。

我正在尝试为报告服务构建身份验证解决方案。

应使用我们现有的costumer数据库对在线客户进行身份验证,而本地管理用户可以使用简单的基本身份验证。

我使用codeplex示例对SSRS进行了安全扩展,我用来发布基本挑战的方式如下

public void GetUserInfo(out IIdentity userIdentity, out IntPtr userId)
{
    if (HttpContext.Current != null && HttpContext.Current.User != null)
        userIdentity = HttpContext.Current.User.Identity;
    else
    {
        HttpContext.Current.Response
            .AddHeader("WWW-Authenticate", "Basic realm=\"ReportServer\"");
        HttpContext.Current.Response.Status = "401 Unauthorized";
        HttpContext.Current.Response.Flush();
        HttpContext.Current.Response.Close();
        userIdentity = new GenericIdentity("not authorized");
    }

    userId = IntPtr.Zero;
}

这样,当未通过LogonUser方法的用户(即直接网址访问,出价报告部署,而不是常规用户应用)受到基本登录/密码弹出窗口的挑战时。为了支持这一点,我制作了一个httpmodule,如下所示

void IHttpModule.Init(HttpApplication context)
{
    context.AuthenticateRequest += CustomAuthenticateRequest;
}

void CustomAuthenticateRequest(object sender, EventArgs e)
{
    var app = sender as HttpApplication;

    if (app == null) return;

    var basicAuth = app.Context.Request.Headers["Authorization"];

    if (!string.IsNullOrEmpty(basicAuth))
    {
        var loginpass = Encoding.Default.GetString(
           Convert.FromBase64String(basicAuth.Replace("Basic ", ""))).Split(':');
        if (loginpass.Length == 2 
            && loginpass[0] == adminUser 
            && loginpass[1] == adminPass)
        {
            app.Context.User = new GenericPrincipal(
                new GenericIdentity(adminUser), null);
        }
    }
}

这在访问/ReportServer网址时效果很好,我受到质疑,输入硬编码的管理员登录/通行证并登录。

问题在于访问/Reports我得到

  

System.Net.WebException:请求失败,HTTP状态为401:   未经授权的

我想知道如何将登录/传递挑战一直传递到/Reports

我正在运行SqlServer 2012以及Reporting Services 2012,但内部工作方式并未从SSRS 2008-R2

更改

web.config我有

<authentication mode="None" />
<identity impersonate="false" />, and the entry for the httpmodule

rssrvpolicy.config我的httpmodule的代码组使用FullTrust

rsreportserver.config我有

    <AuthenticationTypes>
        <Custom/>
    </AuthenticationTypes>, and the entry for the security extension

我还没有配置SSL,绑定是默认的

1 个答案:

答案 0 :(得分:4)

从错误消息中,似乎在呈现报表管理器的UI时发生了身份验证错误。请转到文件夹c:\ Program Files \ Microsoft SQL Server \ MSRS11.MSSQLSERVER \ Reporting Services \ ReportManager \,找出web.config文件,并应用以下更改。

<authentication mode="None" />
<identity impersonate="false" />, and the entry for the httpmodule