ABCchrome标头中的JWT Bearer令牌

时间:2019-09-25 13:32:33

标签: http-headers abcpdf

我正在使用ABCPdf 11将html转换为pdf,需要转换的html页面需要JWT令牌,因此需要传递到ABCChrome,以便它可以使用JWT令牌。 我已经尝试了以下方法,但是身份验证仍然失败:

doc.HtmlOptions.HttpAdditionalHeaders = $"Authorization: Bearer {accessToken}";

我从此处跟随示例:https://www.websupergoo.com/helppdfnet/default.htm?page=source%2F5-abcpdf%2Fxhtmloptions%2F2-properties%2Fhttpadditionalheaders.htm

根据上面URL中的描述,我还尝试了以下选项:

doc.HtmlOptions.NoCookie = true;
doc.HtmlOptions.Media = MediaType.Screen;

添加HttpAdditionalHeaders后,当我从pdf库获得http状态时,我确实获得了401 http状态代码,该代码确认了

var imageId = doc.AddImageUrl(model.Url);
var status = doc.HtmlOptions.ForChrome.GetHttpStatusCode(imageId);

此处的状态为401-未经授权

2 个答案:

答案 0 :(得分:1)

ABCChrome引擎当前不支持HttpAdditionalHeaders属性。 here指定了ABCChrome支持的唯一HtmlOptions。

您可以尝试以下几种方法:

  1. 检查目标服务器是否支持通过GET请求参数发送Web令牌-我想您可能已经完成了:-)
  2. 使AddImageUrl请求URL到脚本的中间Web服务器(甚至是本地HttpServer),该脚本可以根据任何GET参数为您获取页面。
  3. 如果您尝试访问的服务接受了ajax请求,则可以尝试使用javascript通过XMLHttpRequest.setRequestHeader()将响应注入到页面中。注意:如果为此使用本地文件(例如file://),则可能会遇到一些Chromium强制执行的JavaScript安全问题。

我确实知道WebSupergoo为其所有许可证(包括试用许可证)提供free support

祝你好运。

答案 1 :(得分:1)

通过电子邮件发送了ABCPdf支持,不幸的是ABCChrome不支持HttpAdditionalHeaders属性,因此解决方法是自己下载HTML并将其转换为PDF,请参见以下示例:

var imageId = doc.AddImageHtml(html); // <- html downloaded from auth url

也不要忘记添加分页:

// add all pages to pdf
while (doc.Chainable(imageId))
{
    doc.Page = doc.AddPage();
    imageId = doc.AddImageToChain(imageId);
}

for (int i = 1; i <= doc.PageCount; i++)
{
    doc.PageNumber = i;
    doc.Flatten();
}