Как открыть защищенный URL-адрес в html с помощью атрибута src

У меня есть API, размещенный в Azure, который сравнивает два PDF-файла и создает новый результирующий PDF-файл. Я хочу открыть полученный PDF-файл на своей веб-странице html, используя тег для встраивания. когда я помещаю URL-адрес файла kudu в атрибут src тега embed, он не может открыться из соображений безопасности. Когда я использую src=username:[email protected]/api/vfs/site/wwwroot/pdf/Output.pdf, я получаю эту ошибку в браузере:

Запросы подресурсов, URL-адреса которых содержат встроенные учетные данные (например, https://user:pass@host/), блокируются. Дополнительные сведения см. на странице https://www.chromestatus.com/feature/5669008342777856.

На самом деле я хочу открыть этот PDF-файл с автоматическим входом в систему. Могу ли я сделать это любым другим способом через jquery или c #?

Это ссылка на файл в формате PDF: https://testpdfcomparison.scm.azurewebsites.net/api/vfs/site/wwwroot/pdf/Output.pdf


person Asif Hussain    schedule 14.09.2020    source источник
comment
Конечная точка прокси-сервера на стороне сервера для получения содержимого PDF может работать. Используйте эту конечную точку как src и отправляйте учетные данные при получении файла.   -  person charlietfl    schedule 14.09.2020
comment
См. следующие документы: . .microsoft.com/en-us/aspnet/core/security/authentication/   -  person jdweng    schedule 14.09.2020
comment
@charlietfl, можешь показать мне пример, как это сделать?   -  person Asif Hussain    schedule 14.09.2020
comment
Не совсем, у меня практически нет опыта в C#. Получение файла с другого сервера является обычной задачей, и как только вы его получите, вы просто выведете его.   -  person charlietfl    schedule 14.09.2020
comment
@jdweng Я просто хочу отобразить этот pdf-файл в теге html embed или iframe, предоставив учетные данные   -  person Asif Hussain    schedule 14.09.2020
comment
@charlietfl, ты имеешь в виду, что я должен загрузить его с сервера на свой локальный компьютер, а затем отобразить его правильно?   -  person Asif Hussain    schedule 14.09.2020
comment
Нет, совсем нет, src указывает на конечную точку (url) на вашем сервере, когда приходит запрос, он извлекает файл PDF с другого сервера и выводит его на исходный запрос для отображения в браузере. Или может быть на том же сервере   -  person charlietfl    schedule 14.09.2020
comment
Вы не можете делать то, что сервер не поддерживает. Вы не можете использовать текущий метод аутентификации.   -  person jdweng    schedule 14.09.2020
comment
Ваша проблема решена и есть ли прогресс?   -  person Jason Pan    schedule 16.09.2020
comment
спасибо всем за ваш ответ, теперь я решил его, вернув имя файла и используя относительный путь вместо src="username:[email protected]/api/vfs/site/wwwroot/pdf/Output.pdf" с помощью jquery: if (Data) { var embed1 = document.getElementById('outputPdf'); embed1.src = "../../pdf/" + Data; $("#outputPdf").css("display", "block"); }   -  person Asif Hussain    schedule 16.09.2020


Ответы (1)


Я не знаю, почему ваш путь к файлу .pdf включает scm.

Независимо от того, какой код языка использует ваша программа, сгенерированный PDF-файл, хранящийся в определенной папке в текущей операционной среде, должен использовать относительный путь. (Рекомендуется использовать хранилище Azure, если есть много файлов)

Путь к файлу в Azure WebApp содержит scm, поэтому необходимо выполнить проверку авторизации. Например, предоставленная вами ссылка на документ, у моей учетной записи нет разрешения на доступ к ней. Как показано ниже.

введите здесь описание изображения

На самом деле службы приложений Azure — это, по сути, iis. Когда мы пишем код, файлы нужно сохранять. Рекомендуется использовать relative paths. Путь к файлу следующий, мой пример кода .net core 3.0.

введите здесь описание изображения

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }
        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseStaticFiles(new StaticFileOptions
        {
            FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "Html")),
            RequestPath = "/Html"
        });
        app.UseStaticFiles(new StaticFileOptions
        {
            FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "PDF")),
            RequestPath = "/PDF"
        });
        app.UseStaticFiles(new StaticFileOptions
        {
            FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "api")),
            RequestPath = "/api"
        });
        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }

Вы можете скачать мой пример кода и развернуть его. И вы можете получить доступ ниже двух URL-адресов.

  1. https://yourwebsitename.azurewebsites.net/Html/a.html .
  2. https://yourwebsitename.azurewebsites.net/api/vfs/site/wwwroot/pdf/testpdf.pdf .

введите здесь описание изображения

введите здесь описание изображения

person Jason Pan    schedule 15.09.2020
comment
Спасибо за ваше драгоценное время. Я не проверял это, но думаю, что это должно работать - person Asif Hussain; 16.09.2020