簡體   English   中英

如何從 Python 腳本以用戶身份向 Azure 應用服務進行身份驗證?

[英]How can I authenticate as a user to Azure App Service from Python script?

我有一個 Python 腳本,它應該使用鏈接從 Web 資源下載數據。 碰巧資源位於受 Active Directory 保護的 Azure 應用服務中。 我的用戶帳戶被允許訪問鏈接和下載數據(我可以從 Web 瀏覽器手動完成,但想自動化這個過程)。 Python 腳本使用requests庫。 我無法弄清楚如何正確驗證,因為當我嘗試運行腳本時,我得到:

Error 403 - Forbidden
The web app you have attempted to reach has blocked your access.

通常的requests身份驗證不起作用(使用auth參數或session.auth或使用HttpNtlmAuth )。 我知道可以使用 VS Code 對 Azure 進行身份驗證,然后使用DefaultAzureCredential ,但我不知道應該在哪里使用這個DefaultAzureCredential對象(因為它不適用於requests )。

我不需要注冊整個 Python 應用程序或以其他方式被 Azure 資源識別。 它只是一個下載數據的腳本,不應該被生產化。

有什么想法可以從 Azure 中刪除數據嗎?

注意:我不是此 Azure 應用的管理員或創建者,因此無法更改任何限制設置。

簡而言之,腳本制作請求的部分如下所示:

params = {"param1": param1,
          "param2": param2}
session = requests.Session()
session.auth = HttpNtlmAuth(USERNAME, PASSWORD)
url = "my-app.azurewebsites.net/the-rest-of-the-path"
response = session.get(url, params=params, verify=False)

如果要訪問 Azure App Service,則必須對 Azure App Service 進行身份驗證。 如果您無權訪問 Azure 應用服務,我們將無法訪問 Azure 資源。

通常,當網絡服務器阻止您訪問您嘗試在瀏覽器中打開的頁面時,您會收到 403 禁止錯誤。 大多數時候你無能為力。 但是,有時問題出在您的頭上。 以下是可能導致此錯誤的一些要點。

  • 如果你有一個開放的公共 API,並且 Azure 應用服務不允許公共訪問。
  • 您用於調用應用服務的應用 IP 地址未列入白名單。
  • 如果您在中間有一個網關,它也可能會阻止您的呼叫。

以下是您可以嘗試的可能解決方案:

  • 從您的網絡應用程序的網絡頁面中刪除訪問限制。

  • 嘗試添加 0.0.0.0/0 以授予所有人訪問權限。 您可以稍后根據需要添加限制。

  • 限制的順序很重要,因此請仔細檢查。 如果您在批准的呼叫之前有一個被阻止的呼叫,它可能會產生影響。

  • 你也可以有基於 http-headers 的限制,比如 X-Forwarded-For。 請仔細檢查。 這也可能發生在代碼中,具體取決於您處理錯誤的方式。 Azure Front Door 中 HTTP 標頭的協議支持 微軟文檔

  • 如果您的 API 落后於網關應用程序網關與服務端點的集成,請檢查這一點

暫無
暫無

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

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