请求失败,HTTP 状态为 401:在 SSRS 中未经授权

本文关键字:SSRS 授权 失败 HTTP 状态 请求 | 更新日期: 2023-09-27 18:34:35

我的应用程序是用C#编码的Asp.Net MVC3,我在Visual Studio 2008 SQL Server Business Intelligence Developement Studio有一个SSRS解决方案,我通过我的 Asp.Net MVC3应用程序调用SSRS报告。几天前我的应用程序运行良好,但突然出现如下错误:

我的错误 :

The request failed with HTTP status 401: Unauthorized.

我的尝试

  1. 我的 SSRS 报告部署在我的local server上。我在 SSRS 报表解决方案的数据源中正确设置了凭据。

  2. 我尝试在我的 web.config 中添加标签<identity impersonate="true" userName="Domain'username" password="Password" />

  3. 我尝试添加IReportServerCredentials reportCredentials = new ReportServerCredentials("MyUserName", "MyPassword", "ServerName");

  4. 我以'Run as Administrator'的身份运行Visual Studio。

  5. 我尝试了此链接中提到的解决方案 使用 RegEdit 创建密钥

  6. 更新我也尝试了以下解决方案,但结果相同:SSRS中出现未经授权的错误

上述解决方案均无效,但是当我在其他计算机上运行相同的解决方案时,解决方案运行良好并且没有显示任何错误。只有当我从我的机器运行解决方案时,我才会收到错误The request failed with HTTP status 401: Unauthorized.

请求失败,HTTP 状态为 401:在 SSRS 中未经授权

我也遇到了同样的错误,

The request failed with HTTP status 401: Unauthorized.

让我分享我尝试过的东西,它现在工作正常。

public class CustomSSRSCredentials : IReportServerCredentials
    {
        private string _SSRSUserName;
        private string _SSRSPassWord;
        private string _DomainName;
        public CustomSSRSCredentials(string UserName, string PassWord, string DomainName)
        {
            _SSRSUserName = UserName;
            _SSRSPassWord = PassWord;
            _DomainName = DomainName;
        }
        public System.Security.Principal.WindowsIdentity ImpersonationUser
        {
            get { return null; }
        }
        public ICredentials NetworkCredentials
        {
            get { return new NetworkCredential(_SSRSUserName, _SSRSPassWord, _DomainName); }
        }
        public bool GetFormsCredentials(out Cookie authCookie, out string user,
         out string password, out string authority)
        {
            authCookie = null;
            user = password = authority = null;
            return false;
        }
    }

page_load事件内部,

if (!Page.IsPostBack)
{
    ReportViewer1.ProcessingMode = ProcessingMode.Remote;
    IReportServerCredentials ssrscredentials = new CustomSSRSCredentials("MyUserName", "MyPassword", "ServerName");
    ServerReport serverReport = ReportViewer1.ServerReport;
    ReportViewer1.ServerReport.ReportServerCredentials = ssrscredentials;
    serverReport.ReportServerUrl = new Uri("ReportPathKey");
    serverReport.ReportPath = "/Reports/MyReport";
    serverReport.Refresh();
}

这对我有用!

我遇到了同样的问题。一切正常,然后突然我在报表查看器 iframe 中收到 401,而不是调试模式(本地主机(中的报表。我一直在摆弄设置以使其在实时站点上运行,所以我认为我做错了什么......

尝试了几件事,然后决定重新启动并猜测是什么???我的域密码已过期,因此身份验证失败!!愚蠢的我!

以为我会在这里添加我的解决方案,以防人们遇到同样愚蠢的情况并浪费宝贵的时间来弄清楚他们做错了什么......

试试这个

public void GetConnectionOfReportServer()
        {
            try
            {
                NetworkCredential credential = new NetworkCredential("administrator", "password@123", "Domain");
                this.reportViewer1.ServerReport.ReportServerCredentials.NetworkCredentials = credential;
                //select where the report should be generated with the report viewer control or on the report server using the SSRS service.
                this.reportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;
                this.reportViewer1.ServerReport.ReportServerUrl = new Uri(@"http://localhost/ReportServer");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }

我遇到的问题是我的 ReportPath。我使用的是浏览器中呈现的 URL,但应该使用的是 ReportServer 数据库中的 URL。若要获取路径,请查询目录表并使用路径字段中的值。

请求失败,HTTP 状态 401 未经授权。 SSRS 2008

从 web.config 添加键="RS_UName" 值="Rajiv-PC" ----不正确

将上面的值替换为您的系统名称 (Rajiv(,而不是像 Rajiv-PC 那样的 SQL 服务器名称

始终存在系统名称而不是 SQL 服务器名称。

从 web.config 添加键="RS_UName" 值="拉吉夫" ---正确

>好奇的回答解决了我的问题。 谢谢伙计!

另外,请检查您的 web.config。它必须具有以下条件:

'

<system.web>
<httpHandlers>
      <add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
        validate="false" />
    </httpHandlers>
</system.web>
<system.webServer>
<handlers>
      <add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd"
       type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, 
          PublicKeyToken=89845dcd8080cc91" />
</handlers>
  </system.webServer>

'

公共令牌必须相同,否则它将吹出另一个错误。

请检查您指向的网络服务 URL。我在两台单独的服务器上部署了 SSRS,一台工作正常,而另一台则抛出此错误"请求失败,http 状态 401 未经授权"。

所以几个小时后,我看到我没有指向我的web.config上的Web服务URL。报表服务 URL 上的更改示例:http://weburl/ReportServer。

这行得通

!!

我们最近搬到了一台新服务器。我们用于访问 winform 应用中的报告的 SSRS ID 已过期,需要更改密码。

这解决了问题。

我们还使该密码不会过期...:-(

如果它可以帮助尝试使用自定义身份验证访问 SSRS API 的任何人,请确保使用"localhost"(或 SSRS 服务器的域(域参数添加 sqlAuthCookie cookie。如果您将域留空,您将获得 401。

即:

public async Task<string> GetAllCatalogItemsHtml(string filter, string css = "")
    {
        CookieContainer cookieContainer = new CookieContainer();
        cookieContainer.Add(new Cookie("sqlAuthCookie", conn.sqlAuthCookie, "/", "localhost"));
        using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
        {
            using (client = new HttpClient(handler))
            {
                string resp = await client.GetAsync(string.Format("https://{0}/reports/api/v2.0/CatalogItems", conn.ServerUrl)).Result.Content.ReadAsStringAsync();
                CatalogItemResponse catalogItems = JsonConvert.DeserializeObject<CatalogItemResponse>(resp);