Azure 能不能“a”;“用户分配的托管标识”;在当地使用吗?

Azure 能不能“a”;“用户分配的托管标识”;在当地使用吗?,azure,azure-active-directory,azure-managed-identity,Azure,Azure Active Directory,Azure Managed Identity,我正在尝试在我们的一个应用程序中使用。我也读到了关于两者之间的区别 我很清楚,系统分配的托管标识不能在本地使用,因为您正在为Azure资源分配标识 但是,我不清楚用户分配的托管标识是否可以在本地使用。我唯一能找到的是: 在我的场景中,我想从Azure密钥库中读取一些秘密。我已创建了一个用户分配的托管标识,并在密钥库上配置了访问策略,以授予此标识必要的权限。考虑到我正在使用此身份访问Azure Key Vault(这是一个Azure资源),我的期望是无论代码运行的位置如何(使用JetBrains

我正在尝试在我们的一个应用程序中使用。我也读到了关于两者之间的区别

我很清楚,
系统分配的托管标识
不能在本地使用,因为您正在为Azure资源分配标识

但是,我不清楚用户分配的托管标识是否可以在本地使用。我唯一能找到的是:

在我的场景中,我想从Azure密钥库中读取一些秘密。我已创建了一个用户分配的托管标识,并在密钥库上配置了访问策略,以授予此标识必要的权限。考虑到我正在使用此身份访问Azure Key Vault(这是一个Azure资源),我的期望是无论代码运行的位置如何(使用JetBrains Rider作为我的IDE),它都应该工作

但是,当我尝试做以下事情时:

var managedIdentityCredential = new ManagedIdentityCredential("managed-identity-id");
SecretClient secretClient = new(new Uri("https://mykeyvault.vault.azure.net/"), managedIdentityCredential);
KeyVaultSecret secret = await secretClient.GetSecretAsync(key);
我得到
Azure.Identity.CredentialUnavailableException
managedEntityCredential身份验证不可用的
。在本地运行代码时未找到托管标识终结点
错误消息:

Azure.Identity.CredentialUnavailableException: ManagedIdentityCredential authentication unavailable. No Managed Identity endpoint found.
   at Azure.Identity.ManagedIdentityClient.AuthenticateAsync(Boolean async, TokenRequestContext context, CancellationToken cancellationToken)
   at Azure.Identity.ManagedIdentityCredential.GetTokenImplAsync(Boolean async, TokenRequestContext requestContext, CancellationToken cancellationToken)
   at Azure.Identity.CredentialDiagnosticScope.FailWrapAndThrow(Exception ex)
   at Azure.Identity.ManagedIdentityCredential.GetTokenImplAsync(Boolean async, TokenRequestContext requestContext, CancellationToken cancellationToken)
   at Azure.Identity.ManagedIdentityCredential.GetTokenAsync(TokenRequestContext requestContext, CancellationToken cancellationToken)
   at Azure.Security.KeyVault.ChallengeBasedAuthenticationPolicy.AuthenticateRequestAsync(HttpMessage message, Boolean async, AuthenticationChallenge challenge)
   at Azure.Security.KeyVault.ChallengeBasedAuthenticationPolicy.ProcessCoreAsync(HttpMessage message, ReadOnlyMemory`1 pipeline, Boolean async)
   at Azure.Core.Pipeline.RetryPolicy.ProcessAsync(HttpMessage message, ReadOnlyMemory`1 pipeline, Boolean async)
   at Azure.Core.Pipeline.RetryPolicy.ProcessAsync(HttpMessage message, ReadOnlyMemory`1 pipeline, Boolean async)
   at Azure.Core.Pipeline.HttpPipeline.SendRequestAsync(Request request, CancellationToken cancellationToken)
   at Azure.Security.KeyVault.KeyVaultPipeline.SendRequestAsync(Request request, CancellationToken cancellationToken)
   at Azure.Security.KeyVault.KeyVaultPipeline.SendRequestAsync[TResult](RequestMethod method, Func`1 resultFactory, CancellationToken cancellationToken, String[] path)
   at Azure.Security.KeyVault.Certificates.CertificateClient.GetCertificateAsync(String certificateName, CancellationToken cancellationToken)

对此的任何见解都将不胜感激。

否。
managedEntityRedential
在本地环境中也不支持用户管理的身份

您应该使用,以便代码在本地环境中工作

请参阅注释提示

注意

managedEntityCredential
仅适用于的Azure环境 支持托管身份验证的服务。它不起作用 在当地的环境中。对代码使用DefaultAzureCredential 在本地和Azure环境中工作,因为它将退回到 包括托管标识在内的身份验证选项很少

如果您希望将用户作为托管身份使用
DefaultAzureCredential
部署到Azure时,指定 clientId


如果在Azure之外运行,则需要使用服务主体。