令牌刷新到Azure KeyVault访问

时间:2020-10-08 03:46:09

标签: azure azure-keyvault

当我尝试通过本地计算机访问Key Vault时,出现以下错误

DefaultAzureCredential()

我正在运行以下两行,但始终出现错误。

client = SecretClient(vault_url=<URL>, credential=DefaultAzureCredential())
secret = client.get_secret(<SECRET NAME>).value
azure.core.exceptions.ClientAuthenticationError: DefaultAzureCredential failed to retrieve a token from the included credentials.
Attempted credentials:
EnvironmentCredential: EnvironmentCredential authentication unavailable. Environment variables are not fully configured.
ManagedIdentityCredential: ManagedIdentityCredential authentication unavailable, no managed identity endpoint found.
SharedTokenCacheCredential: SharedTokenCacheCredential authentication unavailable. No accounts were found in the cache.
VisualStudioCodeCredential: Azure Active Directory error '(invalid_grant) AADSTS700082: The refresh token has expired due to inactivity. The token was issued on 2020-06-07T03:58:48.4708462Z and was inactive for 90.00:00:00.

我尝试通过以下方式登录Azure az login 但这不会刷新凭据。

编辑: 我已经尝试了documentation中的其他一些配置。看起来奇怪的是Azure CLI凭据的工作原理,因为这似乎是由默认凭据处理的方案之一。

2 个答案:

答案 0 :(得分:2)

如果您使用az login访问Key Vault,则AzureCliCredential()DefaultAzureCredential()在理论上都可以正常工作。但是该错误显示在您的问题中的VisualStudioCodeCredential()上。

VisualStudioCodeCredential::如果用户已登录Visual Studio Code Azure帐户扩展,则DefaultAzureCredential将作为该用户进行身份验证。

DefaultAzureCredential尝试通过以下机制以此顺序进行身份验证,并在成功通过后停止:

enter image description here

因此,您需要使用AzureCliCredential()或设置exclude_visual_studio_code_credential=true来确保跳过VisualStudioCode。

有关Azure身份的更多详细信息,请参见here

答案 1 :(得分:0)

如果您希望它与 DefaultAzureCredential() 一起使用,则需要以下内容:-

  • 服务主体
  • 在 KeyVault 访问策略中授予对服务主体的访问权限。

完成上述操作后,您需要设置以下环境变量:-

  • AZURE_CLIENT_ID(这是上述服务主体(sp)的 clientID)
  • AZURE_CLIENT_SECRET(这是上述 sp 的客户端密钥)
  • AZURE_SUBSCRIPTION_ID(这是 Azure 中的订阅 ID。)
  • AZURE_TENANT_ID(这是活动目录 ID)

要查看 Windows 上的所有环境变量,请打开命令提示符键入命令“set”并按 Enter。

要在 windows 上设置环境变量,例如您想设置 AZURE_CLIENT_ID 变量的值为 jbfdshfbsdfbdsbdgbdjgbdfjbdfj,打开命令提示符键入命令“setx AZURE_CLIENT_ID jbfdshfbsdfbdbdf”和输入

在您重新启动命令提示符之前,它不会显示更新的内容。

然后在您使用 DefaultAzureCredentials() 的地方重新启动 Visual Studio/ vs 代码