簡體   English   中英

使用JavaScript的Cloud API(亞馬遜,Azure)

[英]Cloud API with JavaScript (Amazon, Azure)

我正在研究直接從客戶端JavaScript使用一些雲存儲的可能性。 但是,我遇到了兩個問題:

  1. 安全性 - 體系結構通常基於每個客戶端構建,因此有一個API密鑰(例如)。 這是有問題的,因為我需要我的每一個用戶的安全。 我無法向所有用戶提供相同的API密鑰。

  2. 跨域AJAX。 瀏覽器可以使用HTTP標頭來執行跨域請求,但這意味着我必須能夠在雲端設置它們。 但是,我需要的唯一工作就是能夠添加自定義HTTP響應頭:Access-Control-Allow-Origin:otherdomain.com

我的場景涉及來自JS客戶端的大量簡單隊列消息,我想我會使用雲來擺脫來自我的主要托管服務提供商的這種流量。 Windows Azure有這個隊列服務部分,它似乎非常接近我需要的,除了我不知道這些問題是否可以解決。

有什么想法嗎? 在我看來,雲服務的JavaScript客戶端在不久的將來是不可避免的場景。

那么, 是否有一些帶有REST API的雲存儲可以管理客戶端的身份驗證,而不會為其提供API密鑰?

Windows Azure Blob存儲具有共享訪問簽名 (SAS)的概念,可以在服務器端發布,並且本質上是客戶端可以寫入的特殊URL,而無需直接訪問存儲帳戶API密鑰。 這是Windows Azure存儲中唯一允許在不訪問存儲帳戶密鑰的情況下寫入數據的機制。

SAS可以過期(例如,給用戶10分鍾使用SAS URL進行上傳),並且可以設置為允許即使在發布后也取消訪問。 此外,SAS可用於限時讀取訪問(例如,給用戶1天觀看該視頻)。

如果您的JavaScript客戶端也在瀏覽器中運行,那么您可能確實存在跨域問題。 我有兩個想法 - 沒有經過測試! 一種想法是JSONP風格的方法(盡管這將限於HTTP GET調用)。 另一個(更有希望的)想法是將blob存儲中的.js文件與您的數據文件一起托管,以便它們位於同一個域中(希望使您的Web瀏覽器感到滿意)。

“真正的”解決方案可能是跨源資源共享( CORS )支持,但在Windows Azure Blob存儲中不可用,並且仍在瀏覽器中出現(以及其他HTML 5優點)。

是的,你可以這樣做,但你不希望客戶端提供你的azure密鑰,以便javascript能夠直接訪問隊列。

我希望javascript與Web服務交談,該服務可以檢查用戶的訪問權限並允許/禁止將消息發布到隊列。

因此,javascript只會與Web服務通信,並讓Web服務處理與隊列的通信。

它有點太大了,無法發布示例代碼,但希望這足以讓您入門。

這可以通過Amazon S3完成,但不是我認為的Azure。 原因是S3支持CORS。

http://aws.amazon.com/about-aws/whats-new/2012/08/31/amazon-s3-announces-cross-origin-resource-sharing-CORS-support/

但Azure(尚未)。 此外,從您的問題來看,這聽起來像排隊解決方案是您想要的亞馬遜SQS,但SQS也不支持CORS。

如果您需要任何復雜的隊列語義(如消息過期或長輪詢),那么S3可能不適合您。 但是,如果您的排隊要求很簡單,那么S3可能是合適的。

您必須從瀏覽器調用Web服務,並將所需的S3對象URL作為參數。 該服務的作用是對請求進行身份驗證和授權,如果成功,則生成並返回一個URL,該URL使用查詢字符串身份驗證臨時訪問S3對象。

http://docs.aws.amazon.com/AmazonS3/latest/dev/S3_QSAuth.html

一種巧妙的方式可能是服務只是重定向到查詢字符串身份驗證URL。

對於那些想知道為什么這是一件好事的人來說,這意味着您不必通過計算層傳輸所有S3對象內容。 您只需生成一個查詢字符串經過身份驗證的URL(基本上只是一個簽名字符串),這是一個非常便宜的操作,然后依靠S3提供的大量可擴展性來實際上傳/下載。

更新:截至今年11月,Azure現在支持表,隊列和blob存儲上的CORS

http://msdn.microsoft.com/en-us/library/windowsazure/dn535601.aspx

我認為現有的服務提供商不允許您直接從客戶端查詢存儲。 所以為了解決這個問題:

  1. 您可以編寫一個簡單的服務器並公開REST apis,它根據作為請求參數傳遞的APIKey進行身份驗證,並將您的特定數據返回給您的客戶端。
  2. 有一個嵌入式iframe,並從iframe調用第二個域。 獲取父幀上返回的JSON / XML並處理數據。

更新:看起來Google已經解決了您的問題。 看看這個

https://developers.google.com/storage/docs/json_api/v1/libraries上,查看Google Cloud Storage JSON API client libraries部分。

使用Amazon S3和Amazon IAM,您可以為用戶(不僅僅是客戶端)生成非常精細的API密鑰。 但是,即使可能,也可以通過Javascript使用PITA。

但是,使用CORS標頭和很少的服務器腳本,您可以從HTML5表單直接上傳到S3; 這可以通過在服務器端生成上傳鏈接來實現; 該鏈接將有一個嵌入式策略文檔,它告訴上載表單允許上傳的內容以及使用哪種前綴(“目錄”),內容類型等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM