答案 1:
您可以使用az ad sp credential reset 命令,如下所示。如果不想覆盖App现有的证书,请传递--append参数。
az ad sp credential reset --name '<application-id>' --keyvault joykeyvault --cert cer136 --create-cert --append
答案 2:
1.要使用 MSI 访问租户中的密钥库,只需使用以下代码。
无需更改代码,当您在启用了托管标识的 Azure 应用服务或 Azure VM 上运行代码时,库会自动使用托管标识,请参阅link。
环境变量AzureServicesAuthConnectionString 必须设置为可以访问密钥库的任何credential。 RunAs=Developer; DeveloperTool=AzureCli 用于开发或RunAs=App; 用于托管服务标识(自动在 azure 中)。
using Microsoft.Azure.Services.AppAuthentication;
using Microsoft.Azure.KeyVault;
// Instantiate a new KeyVaultClient object, with an access token to Key Vault
var azureServiceTokenProvider1 = new AzureServiceTokenProvider();
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider1.KeyVaultTokenCallback));
2.如果您想使用服务主体及其存储在密钥库中的证书来获取另一个租户中资源的令牌,AzureServiceTokenProvider 上的连接字符串必须设置为RunAs=App;AppId={TestAppId};KeyVaultCertificateSecretIdentifier={KeyVaultCertificateSecretIdentifier},然后您可以获得其他租户的代币,例如。
const string appWithCertConnection = "RunAs=App;AppId={TestAppId};KeyVaultCertificateSecretIdentifier=https://myKeyVault.vault.azure.net/secrets/myCert";
然后使用代码获取令牌,例如对于资源https://management.azure.com/。
var azureServiceTokenProvider2 = new AzureServiceTokenProvider(appWithCertConnection);
string accessToken = await azureServiceTokenProvider2.GetAccessTokenAsync("https://management.azure.com/", "tenant-id-of-thridh-party-tenant").ConfigureAwait(false);