繁体   English   中英

Azure 逻辑应用在 Http 查询参数请求中使用 SAS 令牌

[英]Azure Logic App using SAS token in Http query parameter request

我正在创建一个 Azure 逻辑应用程序来使用 Abbyy 的 OCR REST API。

我使用Create SAS URI by path action 返回Web URL Web URL将 FQDN(包括 SAS 令牌)返回到我的 blob。

Web URL作为查询参数传递给Http操作。 在代码视图中,JSON 的相关部分如下所示:

"method": "GET",
"uri": "https://cloud.ocrsdk.com/processRemoteImage?source=@{body('Create_SAS_Uri_by_path')?['WebUrl']}&language=English&exportformat=pdfSearchable&description=blah&imageSource=scanner"

uri 解析如下:

https://cloud.ocrsdk.com/processRemoteImage?source=https://mysaaccount.blob.core.windows.net/inbox/180730110047_0001.pdf?sv=2017-04-17&sr=b&sig=2IGMt1qDZthaBSyvD3WJ6T1zc36Wr%2FNoiB4Wki5Lf28%3D&se=2018-08-16T11%3A16%3A48Z&sp=r&language=English&exportformat=pdfSearchable&description=blah&imageSource=scanner"

这会导致错误 (450):

<?xml version="1.0" encoding="utf-8"?><error><message language="english">Invalid parameter: sr</message></error>

这基本上是从 SAS 令牌中获取sr=查询参数,当然,API 没有sr参数,即使有,它的值也是错误的。

我确实找到了这个问题,并且通过调整我的代码以使用replace函数来尝试“百分比转义”&符号(&),因此:

"method": "GET",
"uri": "https://cloud.ocrsdk.com/processRemoteImage?source=@{replace(body('Create_SAS_Uri_by_path')?['WebUrl'],'%26','%2526' )}&language=English&exportformat=pdfSearchable&description=blah&imageSource=scanner"

但是,这没有效果。 即生成的 URI 与上述相同。 有趣的是,SAS 令牌本身似乎已经使用了“百分比转义”。

如果有人对如何解决或解决此问题有任何建议,如果您能分享您的想法,我将不胜感激。

有谁知道 LogicApp 操作是否是开源的,如果是,GitHub 链接是什么。 然后我可以提出问题。

解决了。

基本上,我是在正确的轨道上,但是我在应该使用&时使用了%26 ,所以使用上面的代码,它应该是:

"method": "GET",
"uri": "https://cloud.ocrsdk.com/processRemoteImage?source=@{replace(body('Create_SAS_Uri_by_path')?['WebUrl'],'&','%26' )}&language=English&exportformat=pdfSearchable&description=blah&imageSource=scanner"

因此,URI 显示为:

https://cloud.ocrsdk.com/processRemoteImage?source=https://mysaaccount.blob.core.windows.net/intray/180730110047_0001.pdf?st=2018-08-17T10%3A55%3A38Z%26se=2018-08-18T10%3A55%3A38Z%26sp=r%26sv=2018-03-28%26sr=b%26sig=FTRoVgV7MRz5d5gTgrEs6D0QSy3268BqscZX1LHbJYQ%3D&language=English&exportformat=pdfSearchable&description=blah&imageSource=scanner

下一步:将 XML 正文转换为 JSON ...

更新 1

我已经更新 (17/08/2018) 替换值从%2526%26 我的内裤显然有些扭曲。 一定是在试图双重逃脱,这是不必要的。

尽管 Microsoft 似乎对 SAS 令牌进行了部分百分比编码,但我注意到他们使用%3D=进行了百分比编码,但是,Abbyy API 似乎并不关心= (来自邮递员的测试)。

更新 2

不知道为什么更新 1有效。 这可能是因为我将访问策略设置为 blob(仅对 blob 进行匿名读取访问),并将其设置回私有尚未生效,或者它可能是错误的内容类型。 无论如何,它起作用了,然后它没有。 好吧,它用%26替换&没有问题,我也尝试转义= ,但端点不喜欢它,通过 Postman 和 Logic App 进行测试。

我的触发器实际上是一个C# BlobTrigger * Azure Function App,并且我已经编写了生成SAS令牌的代码,所以我使用了dotnet的Uri.EscapeDataString()方法: string fullUrl = cloudBlobContainer.Uri + "/" + blobName + sasToken;

string escapedUri = Uri.EscapeDataString(fullUrl);

log.LogInformation($"Full URL: {fullUrl}");
log.LogInformation($"Escaped URL: {escapedUri}");

return escapedUri;

更新 3

刚刚看到由 Logic App 设计者创建的这一行:

"path": "/datasets/@{encodeURIComponent(encodeURIComponent('https://someaccount.sharepoint.com/sites/eps'))}/tables//items//attachments",

看起来encodeURIComponent()可能是一个与Uri.EscapedDataString做同样事情的Uri.EscapedDataString ,并将替换replace()函数。 我还没有测试过。

*我为触发器使用函数应用程序的原因归结为成本。 虽然有一个逻辑应用触发器在检测到新 blob 时运行,但它必须按计划运行。 我的计划是消耗,并且我已经阅读了逻辑应用程序运行时的 MS 费用,无论它是否执行任何操作。 恕我直言,当 90% 的时间没有任何事情要做时,每 5 秒触发一次任务是低效的。 功能应用程序更适合我的要求,尽管如果应用程序进入睡眠状态,显然有大约 10 分钟的“预热”期。 我可以忍受这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM