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