亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

VisualStudioCodeCredential.get_token 失敗

VisualStudioCodeCredential.get_token 失敗

慕桂英4014372 2023-07-27 16:33:29
我在 VS Code 中使用 Jupyter Notebook 和 Azure Python SDK 進行本地開發。安裝了相關的 VS Code 擴展:PythonAzure 帳戶Azure 存儲(也許相關?)目標:DefaultCredential使用身份驗證從 Azure Keyvault 檢索機密由于沒有環境變量或ManagedIdentity憑據,DefaultCredential因此應默認從 VS Code 中提取我的憑據問題:import loggingfrom azure.keyvault.secrets import SecretClientfrom azure.identity import DefaultAzureCredentialkeyvault_name = "kv-test"keyvualt_url = "https://" + keyvault_name + ".vault.azure.net"keyvault_credential = DefaultAzureCredential()kv_secret1_name = "secret-test"keyvault_client = SecretClient(vault_url=keyvualt_url, credential=keyvault_credential)retrieved_key = keyvault_client.get_secret(kv_secret1_name)? ? ? ??logging.info("Account key retrieved from Keyvault")錯誤:EnvironmentCredential.get_token failed: EnvironmentCredential authentication unavailable. Environment variables are not fully configured.ManagedIdentityCredential.get_token failed: ManagedIdentityCredential authentication unavailable, no managed identity endpoint found.SharedTokenCacheCredential.get_token failed: SharedTokenCacheCredential authentication unavailable. No accounts were found in the cache.VisualStudioCodeCredential.get_token failed: **Failed to get Azure user details from Visual Studio Code**.到目前為止嘗試過:F1,?Azure: Sign in通過瀏覽器進行身份驗證不用找了看起來DefaultCredential()信用鏈正在運行,但它無法運行...get Azure user details from Visual Studio Code.。這是因為我正在 VS Code 中的 Jupyter Notebook 內進行開發,還是存在其他問題?看起來Python .NET SDK 也發生了類似的情況。
查看完整描述

4 回答

?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

不知道為什么它不起作用,它看起來是正確的。如果您只想使用 Visual Studio Code 登錄,也可以使用AzureCliCredential. 它在我這邊起作用。


您可以用來az login登錄您的帳戶。然后您將使用該代碼獲得秘密。


from azure.keyvault.secrets import SecretClient

from azure.identity import DefaultAzureCredential,AzureCliCredential


keyvault_credential= AzureCliCredential()


secret_client = SecretClient("https://{vault-name}.vault.azure.net", keyvault_credential)

secret = secret_client.get_secret("secret-name")


print(secret.name)

print(secret.value)

http://img1.sycdn.imooc.com/64c22c080001f60c06090038.jpg

http://img1.sycdn.imooc.com/64c22c12000156e905890052.jpg

查看完整回答
反對 回復 2023-07-27
?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

還有另一種簡單的方法可以解決此問題。我們可以使用前面的配置選項。

if self.local_dev:

? ?print(f"Local Dev is {self.local_dev}")

? ?self.az_cred = DefaultAzureCredential(

? ? ? ?exclude_environment_credential=True,

? ? ? ?exclude_managed_identity_credential=True,

? ? ? ?exclude_shared_token_cache_credential=True,

? ? ? ?exclude_interactive_browser_credential=True,

? ? ? ?exclude_powershell_credential=True,

? ? ? ?exclude_visual_studio_code_credential=False,

? ? ? ?exclude_cli_credential=False,

? ? ? ?logging_enable=True,

? ? ? ?)


else:

? ? self.az_cred = DefaultAzureCredential(

? ? ? exclude_environment_credential=True, logging_enable=True

? ? ? )

請注意,exclude_visual_studio_code_credential和 exclude_cli_credentialas 設置為False以及其他設置True為排除本地開發,并exclude_environment_credential設置True為用于其他環境(例如生產)。


default.py您可以在 package.json文件中看到這些配置azure identity。

http://img2.sycdn.imooc.com/64c22c2e0001b1d906530126.jpg

查看完整回答
反對 回復 2023-07-27
?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

如文檔中所述:

VisualStudioCodeCredential 不適用于高于 0.9.11 的 Azure 帳戶擴展版本,這是一個已知問題。此問題的長期解決方案正在進行中。同時,請考慮通過 Azure CLI 進行身份驗證。

舉:DefaultAzureCredential(exclude_visual_studio_code_credential=True)

無論如何,根據vscode擴展的版本,我們可能需要使用另一種身份驗證方式,例如SharedTokenCacheCredential,AzureCliCredential甚至InteractiveBrowserCredential。

就我而言,我的身份驗證在該步驟中失敗SharedTokenCacheCredential,據我所知,這是 Microsoft 產品之間使用的共享緩存。因此,我認為其他安裝了 Microsoft 產品的人也可能會發生同樣的情況。

它失敗了,因為我的目標租戶未包含在此緩存中。為了解決這個問題,我有兩個選擇:要么禁用共享令牌憑據,要么將目標租戶包含在共享緩存中。

對于第一個選項,我們可以執行與禁用 vscode 類似的操作:DefaultAzureCredential(exclude_shared_token_cache_credential=True)

對于第二個選項,我按照DefaultAzureCredential(additionally_allowed_tenants=[TENANT_ID])中的建議進行了操作: 。但通過查看源代碼,我們似乎可以通過以下方式實現相同的目的:

  • 將目標租戶 ID 設置為名為 的環境變量AZURE_TENANT_ID,或者;

  • 直接傳遞共享緩存租戶id:DefaultAzureCredential(shared_cache_tenant_id="TENANT_ID")

請注意,env 變量的優點是它可以被其他身份驗證方法使用,即InteractiveBrowserCredentialVisualStudioCodeCredential。


查看完整回答
反對 回復 2023-07-27
?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

SharedTokenCacheCredential 上的身份驗證失敗。排除它修復了排除_shared_token_cache_credential 設置為 true 的問題。從 SDK 代碼中可以看出,當我們配置了某些憑據方法并且該方法失敗時,鏈中的其他方法將被跳過。


for credential in self.credentials:

? ? ? ? try:

? ? ? ? ? ? token = await credential.get_token(*scopes, **kwargs)

? ? ? ? ? ? _LOGGER.info("%s acquired a token from %s", self.__class__.__name__, credential.__class__.__name__)

? ? ? ? ? ? self._successful_credential = credential

? ? ? ? ? ? return token

? ? ? ? except CredentialUnavailableError as ex:

? ? ? ? ? ? # credential didn't attempt authentication because it lacks required data or state -> continue

? ? ? ? ? ? history.append((credential, ex.message))

? ? ? ? except Exception as ex:? # pylint: disable=broad-except

? ? ? ? ? ? # credential failed to authenticate, or something unexpectedly raised -> break

? ? ? ? ? ? history.append((credential, str(ex)))

? ? ? ? ? ? _LOGGER.debug(

? ? ? ? ? ? ? ? '%s.get_token failed: %s raised unexpected error "%s"',

? ? ? ? ? ? ? ? self.__class__.__name__,

? ? ? ? ? ? ? ? credential.__class__.__name__,

? ? ? ? ? ? ? ? ex,

? ? ? ? ? ? ? ? exc_info=True,

? ? ? ? ? ? )

? ? ? ? ? ? break #<------------------

注意循環中的最后一個中斷。因此,另一種方法是讓 SharedTokenCacheCredential 不可用。


查看完整回答
反對 回復 2023-07-27
  • 4 回答
  • 0 關注
  • 234 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號