簡體   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