确定运行时用户分配的受管身份的客户端ID?

时间:2020-11-02 20:04:50

标签: azure-web-app-service azure-functions azure-managed-identity

如何确定用户分配的托管身份到Azure上运行的应用程序服务或功能的客户端ID?可以分配多个用户分配的托管身份,我想在运行时获取分配给我的应用程序的身份列表。

这样做的目的是避免将托管用户身份的客户端ID存储在配置中,以用于创建用于访问KeyVault和其他资源的DefaultAzureCredential

现在我的代码如下:

string managedIdentityClientId = Environment.GetEnvironmentVariable("ManagedIdentityClientId", EnvironmentVariableTarget.Process);
var options = new DefaultAzureCredentialOptions { ManagedIdentityClientId = managedIdentityClientId };
var keyVaultCredentials = new DefaultAzureCredential(options);

我想避免将ManagedIdentityClientId存储在应用程序设置中,并尽可能从已配置的应用程序服务中读取它。

2 个答案:

答案 0 :(得分:0)

没有凭据就无法在运行时获取用户分配的托管身份的客户端ID。

即使您可以使用其他方式,例如在代码中调用REST API来获取它们,您还需要使用另一个凭据(例如服务主体),这意味着您还需要在代码中公开客户端ID和密码或将其存储在应用程序设置中,这使得没有感。

因此,在您的情况下,我认为将客户端ID存储在应用程序设置中是使用MSI的最可行方法。

答案 1 :(得分:0)

由于您的Azure资源上可以有多个用户分配的托管身份,因此无法直接推断应使用哪个用户分配的身份,因此需要指定它。

对于系统分配的托管身份,您无需指定clientId,因为每个资源只能有1个系统分配的身份。

“我想避免在应用程序设置中存储ManagedIdentityClientId,并尽可能从已配置的应用程序服务中读取它。”

即使您可以列出分配给资源的所有用户分配资源,也必须有逻辑从列表中选择合适的资源。通过Config显式指定clientId更加容易。