Проблема SSRS 2016 с пользовательским расширением безопасности (аутентификация)
У меня есть веб-сайт (httphandler), размещенный в IIS, и я читаю ответ (используя HttpWebRequest
а также HttpWebResponse
) из SSRS 2106 и записи потока вывода в веб-браузер, и пользовательская аутентификация работает, как и ожидалось.
Однако после успешной аутентификации я передаю этот SQLAuthCookie, возвращенный SSRS 2016, отправляя новый веб-запрос в " http://xxxxxx:88/Reports/Browse, чтобы получить требуемый ответ, но когда я записываю вывод в браузер Я получаю пустой экран, похоже, что я делаю здесь какую-то ошибку.
Пожалуйста, найдите ниже фрагмент кода и дайте мне знать, если я что-то упустил. Тот же подход отлично работает с SSRS 2012 и 2014. Кроме того, разметка, созданная моим сайтом и сервером отчетов SSRS, одинакова.
После того, как аутентификация прошла успешно, SSRS возвратил файл cookie аутентификации SQL, и я передаю его обратно с новым запросом, чтобы получить содержимое домашней страницы ( http://xxxxxx/Reports/browse)
Код внутри обработчика Метод запроса процесса:
var streamWriter = new StreamWriter(context.Response.OutputStream)
var request = (HttpWebRequest)null;
Uri uri = new Uri("http://xxxxxx/Reports/browse");
request = (HttpWebRequest)HttpWebRequest.Create(uri);
CookieContainer cookieJar = new CookieContainer();
request.CookieContainer = cookieJar;
request.CookieContainer.Add(response.Cookies["SqlAuthCookie"]);
request.KeepAlive = false;
request.Headers.Add("Accept-Language",
HttpContext.Current.Request.Headers["Accept-Language"]);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// Get the stream containing content returned by the server.
var dataStream = response.GetResponseStream();
var reader = new StreamReader(dataStream,
Encoding.GetEncoding(response1.CharacterSet));
//Read the content
String responseFromServer = reader.ReadToEnd();
streamWriter.Write(responseFromServer);
Я получаю пустую страницу, похоже, что CSS и JavaScript не вызывается / загружается.
Пожалуйста, смотрите ниже сгенерированной разметки - которая показывает пустую страницу.
<!DOCTYPE html>
<html lang="en" id="portal" ng-controller="MainController as main" ng-class="{'flex':main.needsCssFlex}" ng-strict-di resizer>
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"/>
<title ng-bind="main.documentTitle">Reporting Services Web Portal</title>
<script type="text/javascript">
var locName = window.location.pathname.split('/')[1];
document.write("<base href='/" + locName + "/' />");
//Favicon Related elements
var favIconPath = window.location.origin + "/" + locName + "/favicon.ico";
document.write("<link rel='shortcut icon' href='" + favIconPath + "' />");
document.write("<link rel='icon' href='" + favIconPath + "' />");
</script>
<!--Favicon Related elements-->
<link rel="apple-touch-icon" sizes="57x57" href="assets/img/fi/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="114x114" href="assets/img/fi/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="72x72" href="assets/img/fi/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="144x144" href="assets/img/fi/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="60x60" href="assets/img/fi/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="120x120" href="assets/img/fi/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="76x76" href="assets/img/fi/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="152x152" href="assets/img/fi/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="assets/img/fi/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="assets/img/fi/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="assets/img/fi/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="assets/img/fi/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="assets/img/fi/favicon-16x16.png">
<link rel="manifest" href="assets/img/fi/manifest.json">
<meta name="msapplication-TileColor" content="#eaeaea">
<meta name="msapplication-TileImage" content="assets/img/fi/ms-icon-144x144.png">
<meta name="msapplication-config" content="assets/img/fi/browserconfig.xml">
<!--End of Favicon Related elements-->
<!-- css and scripts are injected at build time by gulpfile.js -->
<script type="text/javascript">
// inject:css
document.write("<link rel='stylesheet' href='assets/css/app-284def18-fa92-4a86-b3df-eb5a3ef54387-bundle.min.css'>");
document.write("<link rel='stylesheet' href='assets/css/brand.css'>");
// endinject:css
</script>
</head>
<body ng-class="{'branded':isBranded, 'nonwindows':!main.isWindows}" translate-cloak>
<div id="page">
<header navbar-fixed-top" ng-if="showChrome">
<navbar></navbar>
</header>
<section id="subnav" navbar-fixed-top" ng-if="main.serviceState.isAvailable && showChrome">
<subnav></subnav>
</section>
<section id="main" ng-cloak" ng-class="{'hideChrome': !showChrome}">
<div ui-view></div>
</section>
</div>
<div id="preloader" aria-busy="true" preloader></div>
<script type="text/javascript">
// inject:js
document.write("<script src='assets/js/app-284def18-fa92-4a86-b3df-eb5a3ef54387-bundle.min.js'><\/script>");
// endinject:js
</script>
</body>
</html>