我有一個應用程序,用戶可以看到存儲在azure blob存儲上的圖像。我希望圖像網址只在用戶登錄時纔有效。複製圖像網址並在另一個瀏覽器上粘貼不起作用。不知道如何做到這一點。已經在其上使用SAS並且有到期時間。所以鏈接將工作半小時。我只想讓登錄用戶訪問它,而不是時間限制。製作Azure blob Url只能訪問登錄用戶
回答
要在Blob存儲訪問文檔,他們可以是
- 公共
- 與關鍵
- 與SAS令牌訪問的訪問的
存儲無法知道你的身份驗證系統。如果您不希望按時間綁定令牌,則可以在容器中設置共享訪問策略,在該處設置到期時間,並僅引用SAS令牌中的策略。然後,您可以稍後再次在策略中設置到期時間,而不重新生成令牌。
但其他時間限制的SAS令牌是您可以做的唯一的事情。
我建議一種替代方法 - 將自己的圖像檢索功能作爲自己的控制器(圖像控制器)公開。這將允許您限制只有登錄用戶才能訪問圖像。如果你這樣做,從你的容器中刪除公共訪問。
這種方法的另一個好處是,如果您選擇將圖像託管在別處(即不在blob存儲中),則只需更改控制器,其他部分代碼將保持不變。也就是說,控制器封裝了您的圖像託管邏輯。
我通常使用HttpHandler。
示例代碼段:
public class BlobHandler : IHttpHandler, IReadOnlySessionState
{
public void ProcessRequest(HttpContext context)
{
var request = context.Request;
var response = context.Response;
var path = request.Url.AbsolutePath;
var parts = path.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
// fetch record from db
var attachment = Attachment.FetchByUrl(parts[parts.length - 1]);
if (attachment == null)
throw new HttpException(404, "Blob not found.");
// helper method - get a blob instance, if it doesn't exist return null
var blob = CloudStorage.GetBlob(Constants.StoragePrivateContainer, attachment.BlobPath);
if (blob == null)
throw new HttpException(404, "Blob not found.");
// custom auth
if (!context.Request.IsAuthenticated)
throw new HttpException(403, "Access denied.");
var p = context.User as CustomPrincipal;
if (p == null)
throw new HttpException(403, "Access denied.");
if (!p.IsInRole(Enums.Role.Downloader))
throw new HttpException(403, "Access denied.");
blob.DownloadToStream(context.Response.OutputStream);
response.ContentType = blob.Properties.ContentType;
response.Flush();
}
public bool IsReusable => true;
}
忽略RouteConfig 「斑點」 路徑:
routes.IgnoreRoute("blob/{*pathInfo}");
添加到處理程序處理部分在web.config中:
<add name="Blobs" path="blob/*" verb="*" type="MyLibrary.BlobHandler" resourceType="Unspecified" preCondition="integratedMode" />
正如其他建議 - 不要忘記將你的容器設置爲「私人」。
由於我們先下載blob,是不是內存廣泛?不直接設置 – InTheWorldOfCodingApplications
例如,當您製作html圖像時,您只需使用: –
獲取CloudBlockBlob的實例不會加載blob的內容(即使獲取需要調用FetchAttributes方法的元數據)。在HTTP處理程序中,您只需打開HTTP響應流,然後直接從blob內容中用字節「填充」它。 –
- 1. 訪問登錄用戶的Azure Blob存儲
- 2. 限制訪問圖像文件登錄用戶只能在php
- 3. 限制Azure Blob容器訪問Azure CDN
- 4. 只有登錄後才能訪問製作頁面 - Firebase網絡
- 5. 允許訪問html頁面只能登錄用戶
- 6. 如何確保只有登錄用戶才能訪問頁面?
- 7. 確保登錄的用戶只能訪問他的數據
- 8. SugarCRM:網頁鏈接(只能被登錄用戶訪問)
- 9. 使用Google Apps for Work帳戶登錄訪問Azure門戶
- 10. 登出的用戶正在訪問的視圖登錄用戶只能訪問在Django
- 11. 需要登錄url訪問
- 12. 訪問試圖訪問developers.paypal.com作爲登錄的用戶
- 13. 如何使Django的通用視圖只能被登錄用戶訪問?
- 14. 檢查用戶是否有權訪問url(用於登錄返回url)
- 15. 訪問登錄的用戶在模板
- 16. 只允許登錄用戶訪問私人頁面
- 17. vb.net登錄訪問控制
- 18. 限制登錄訪問wp?
- 19. 限制FatFractal登錄訪問
- 20. 訪問Azure blob存儲使用C++
- 21. 使用Codeigniter訪問Azure blob存儲
- 22. 如何限制只有在opencart使用vqmod登錄用戶的訪問?
- 23. JSP拒絕未登錄用戶直接訪問URL
- 24. Azure - 限制只能訪問應用服務
- 25. 如何讓用戶只能訪問他們的記錄?
- 26. 防止註銷用戶訪問可用於登錄用戶的url鏈接
- 27. 使用Flask-Login阻止登錄用戶訪問登錄路由
- 28. WCF客戶端只能在訪問URL後使用IE
- 29. 重定向登錄,當用戶沒有登錄或用戶嘗試訪問頁面直接從URL使用angularjs
- 30. ASP.Net成員資格只允許用戶在登錄時訪問操作
這將如何工作? 標記需要一個實際的URL來顯示圖像。如何將其轉換爲其他內容? – InTheWorldOfCodingApplications
在你的代碼中,你寫了asp.net,所以我假設你有一些你的應用程序正在與之通信的休息端點。在這種情況下,您的控制器的獲取端點現在將作爲URL:www.yoursitename.com/Images/imageid。 – PartlyCloudy
一些更多細節 - get image端點將返回一個HttpResponseMessage,圖片字節作爲內容,ontent.Headers.ContentType是您的圖片類型,例如MediaTypeHeaderValue(「image/jpeg」) – PartlyCloudy