Проблема 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>

0 ответов

Другие вопросы по тегам