使用 SSRS ASP.NET ReportViewer 和 Web 服务进行 Windows 身份验证

2024-05-20

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

此站点上有一个 Web 表单 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。

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


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

机器1:客户端浏览器

机器2:网络服务器

机器3:SSRS + SQL Server

为了解决双跃点问题,我让 IT 部门为 Machine2 打开 Active Directory 委派,设置为“信任此计算机以委派任何服务(仅限 Kerberos)”。

在我的网络服务器上,我修改了 Web.config 文件以具有:

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

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

我重新启动了 SSRS 服务器,一切都开始工作。

希望这对某人有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SSRS ASP.NET ReportViewer 和 Web 服务进行 Windows 身份验证 的相关文章

随机推荐

  • 内存一致性 - Java 中的happens-before关系[重复]

    这个问题在这里已经有答案了 在阅读有关内存一致性错误的 Java 文档时 我发现与创建 发生 之前 关系的两个操作相关的点 当语句调用时Thread start 每个具有 与该语句发生之前的关系也有一个 与 new 执行的每个语句之间发生的
  • 如何判断应用程序是否是Web应用程序

    在 Windows 服务和 Web 应用程序中运行的核心程序集中 我需要存储每个用户会话的信息 该服务将具有单个用户会话 并且 Web 应用程序使用 HttpContext Current 我想配置在核心程序集中使用哪种方法 约定优于配置
  • 通过标识引用对象的标准方法(例如循环引用)?

    JSON 中是否有通过身份引用对象的标准方法 例如 具有大量 可能是循环 引用的图形和其他数据结构可以被合理地序列化 加载吗 Edit 我知道做一次性解决方案很容易 列出图中所有节点的列表 然后 我想知道是否有一个标准的 通用的解决方案来解
  • Plesk Windows 部署 Node.js

    我创建了一个以 Node js 作为后端的 Angular 项目 这是服务器文件结构 Home directory httpdocs node hm dist browser folder server folder server js p
  • 在 WooCommerce 中添加到购物车之前清空购物车

    我正在使用 WP 作业管理器和 Woo Subscriptions Now 最初 我选择了一个套餐 Woo Subscription 然后我添加了所有细节 但没有提交 回到网站 所以要再次购买 我需要选择一个套餐 于是我选择了套餐并填写了详
  • 识别操作系统

    我在 Intel 编译器上的 Fortran 90 代码取决于它运行的操作系统 例如 if OS win7 then do X else if OS linux then do y end if 我如何以编程方式执行此操作 您可以使用预处理
  • jquery 验证错误位置

    这看起来很简单 但我无法弄清楚 我正在使用 jquery 验证插件 我验证所有文件 但我想要的是在输入文本行中显示验证消息警报 例如在电子邮件输入中 请填写电子邮件地址 但现在它出现在所有字段下 在我的html中
  • 如何使用 Plotly 中的直方图将所有离群值分入一个分箱?

    所以问题是 我可以在 Plotly 中绘制直方图 其中所有大于某个阈值的值都将被分组到一个箱中吗 所需的输出 但使用标准情节Histogram类我只能得到这个输出 import pandas as pd from plotly import
  • 如何从 Retrofit2 获取字符串响应?

    我正在做 android 正在寻找一种方法来执行超级基本的 http GET POST 请求 我不断收到错误 java lang IllegalArgumentException Unable to create converter for
  • 重写 URL,将 ID 替换为查询字符串中的标题

    我对 mod rewrite 很陌生 但我做了一些搜索 但找不到这个问题的答案 我有一个网站 它只有一个 PHP 页面 根据查询字符串中传递给它的 ID 提供数十页内容 我想重写 URL 以便此 ID消失并替换为从数据库中提取的页面标题 例
  • 使用 EWS 托管 API 为其他用户创建约会?

    在 EWS 托管 API 中 可以轻松地为特定用户创建约会 ExchangeService service new ExchangeService service Credentials new NetworkCredentials adm
  • 从 ffmpeg 获取实时输出以在进度条中使用(PyQt4,stdout)

    我已经查看了很多问题 但仍然无法完全弄清楚 我正在使用 PyQt 并且希望能够运行ffmpeg i file mp4 file avi并获取流式输出 以便我可以创建进度条 我看过这些问题 ffmpeg可以显示进度条吗 https stack
  • SQLite + SpatiaLite 问题

    我正在尝试使用 System Data SQLite 提供程序从 C 访问 SpatiaLite 当我尝试加载 SpatiaLite 扩展时 我总是得到 System Data SQLite SQLiteException SQLite e
  • 具有 Firebase (FCM) 推送通知的 Node js

    我正在使用 Node js 开发 REST api 并且有一个休息端点来发送 firebase 推送通知 我的代码如下 const bodyParser require body parser var cors require cors v
  • Renderscript 示例构建错误

    所以我想尝试使用 RenderScript 的示例 并在 Eclipse 中导入了 HelloWorld 但它给了我这样的错误 2011 10 25 13 10 48 HelloWorld home mileoresko workspace
  • 如何使用open xml sdk获取word文档的所有合并字段

    我是初学者打开xml sdk 我试图找出文档的所有合并字段 但我没有得到页眉和页脚合并字段 任何人都可以提出一个可行的解决方案吗 我正在尝试这样的事情 foreach FieldCode field in docGenerated Main
  • 使用位操作查找字符串中的重复项时出现问题

    我认为 我已经实现了正确的逻辑来查找字符串是否包含重复项 但即使在终端中没有打印任何内容 我也无法理解为什么会这样 那么我在这个程序中犯了哪些错误 任何人都可以解释为什么它不起作用 include
  • 如何以编程方式断开拨出呼叫

    我使用以下代码以编程方式断开呼叫 但它不起作用 private void callDisconnect try TelephonyManager manager TelephonyManager this getSystemService
  • 提升条件变量 - 对“notify_one”的调用是否堆栈?

    在使用 Boost 线程的单个生产者 单个消费者应用程序中 如果生产者线程多次调用cond var notify one 在消费者线程调用之前cond var wait lock 是否会额外致电notify one被堆叠起来 这样每次调用
  • 使用 SSRS ASP.NET ReportViewer 和 Web 服务进行 Windows 身份验证

    我目前在使用 SSRS 时遇到一些问题 我有一个使用 Windows 身份验证的 ASP NET 网站 这工作正常 我知道网站当前用户是当前登录的用户 此站点上有一个 Web 表单 ReportViewer 当我不设置凭据时 这工作正常 然