reporting-services - SSRS 2017 Web 门户表单身份验证访问问题
问题描述
我已经使用 Microsoft 示例( https://github.com/Microsoft/Reporting-Services/tree/master/CustomSecuritySample )实现了自定义身份验证(基于表单身份验证)。
它是 SSRS/SQL Server 2017 的示例。在我的情况下,报告服务安装在 Web 测试服务器上,其域地址可从 Intranet 网络访问。数据库引擎安装在第二台服务器上。在 Web 服务器上,我们还安装了 IIS。
除了访问 Web Portal 之外,它看起来工作正常。访问 Web 门户 ( https://somedomain/reports ) 时,我总是被重定向到 logon.aspx 页面,即使我已经通过身份验证(User.Identity.IsAuthenticated 返回 true 并且 User.Identity.Name 在 logon_aspx 上返回正确的用户名.page_load)。表单身份验证 cookie 已设置。当我通过身份验证时,我会从 Page_Load 返回,否则我会以无限重定向循环告终。
但我注意到我可以使用报告服务器服务(即https://somedomain/ReportServer)访问报告:
我可以单击一个报告,它将显示出来。
此外,我可以使用 SSMS 和 Forms 身份验证连接到 Reporting Services:
我可以访问 Reporting Services 属性。所以我有完全的访问权限。我正在使用具有所有权限的用户进行连接,即 Authorization.IsAdmin 始终为 true(请参阅示例中的 Authorization 类)。此类实现 IAuthorizationExtension。
但我注意到,在访问门户网站时,根本没有调用 Authorization.CheckAccess 方法!所以这可能是一个线索。仅调用 AuthenticationExtension 类中的方法。这是我在这个类中的自定义日志:
调用 SetConfiguration。
调用 GetUserInfo。
获取用户信息。设置用户身份。已验证:'True',类型:'Forms',用户名:Invoked SetConfiguration。
调用 GetUserInfo 2.
GetUserInfo。设置用户身份。已验证:'True',类型:'Forms',用户名:Invoked SetConfiguration。
调用 GetUserInfo。
获取用户信息。设置用户身份。已验证:'True',类型:'Forms',用户名:
我已为 Reporting Services(也包括 HTTP)打开扩展日志记录,但没有错误。
我在我的本地机器上也有这个示例的本地(开发人员)实现,它工作正常。我可以访问门户网站(尽管我已经测试过从本地访问它)。
所以这只发生在测试服务器上。这发生在 http 和 https(无论使用哪种协议)。
我还将本地版本的日志与测试版本的日志进行了比较,但没有发现任何有趣的东西。
因此,即使设置了表单身份验证 cookie,也会将 /reports 请求重定向到 logon.aspx:
如果我清除 cookie,在设置 cookie 之前我会收到更多请求,但对 /reports 的最后一个请求应该是成功的(因为它在本地环境中),但在我的情况下,它会重定向回 logon.aspx。
我已经花了两天时间来解决这个问题(尝试各种事情)但没有运气。有人可以帮我吗?
PS对不起我的英语。
解决方案
我已经解决了这个问题。我刚刚重新安装了 SSRS,这有帮助。所以看起来我的安装以某种方式损坏了。
推荐阅读
- javascript - 在 setInterval 中打开链接时出现问题?
- performance - 'must' 和 'must_not' 之间的 Elasticsearch 性能差异
- reactjs - 在 React 中使用 class 而不是 className 属性的任何或多或少的官方方式
- python - 在后台进程的python子进程中使用'&'
- swift - 如何调整通过UIDatePicker设置的日期
- asp.net - 为什么 _session.Use 方法不能正常工作?
- opengl - 如何在 FreeType 中重置字符的 X 位置
- android-studio - 将 Unity 游戏导入为动态功能
- clojure - 如何在 Clojure EDN 中以不同的顺序执行自定义标签阅读器
- java - Java - 如何将 CSV 文件反序列化为 JavaBeans