4 回答

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)

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。

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 變量的優點是它可以被其他身份驗證方法使用,即InteractiveBrowserCredential
和VisualStudioCodeCredential
。

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 不可用。
添加回答
舉報