我们的Azure AD租户中有一个多租户应用程序。它在其他一些租户(我们知道哪些租户)中得到授权。并且它已注册了多个证书以用作客户端凭据。
我们想从本地存储中删除证书,并使用密钥库中的证书来请求外部租户之一的令牌。根据{{3}},这是用例之一。
我们的房客(id:xxxx):
其他房客(id:yyyy):
如何在连接到现有应用程序(应用程序标识:abcd-xxx-xxxx-xxx)的密钥库中创建证书?重要的是要注意,由于该应用程序已被数位第三方管理员批准,因此无法重新创建。过期后,用于创建新证书的计数相同。
如何将Admin consent库设置为:
答案 0 :(得分:1)
答案1:
您可以使用az ad sp credential reset
命令,如下所示。如果您不想覆盖应用程序的现有证书,请传递--append
参数。
az ad sp credential reset --name '<application-id>' --keyvault joykeyvault --cert cer136 --create-cert --append
答案2:
1。要使用MSI访问租户中的密钥库,只需使用以下代码即可。
不需要更改代码,当您在启用了托管身份的Azure App Service或Azure VM上运行代码时,库将自动使用托管身份,请参阅此link。
必须将环境变量AzureServicesAuthConnectionString
设置为任何具有密钥库访问权限的credential。 RunAs=Developer; DeveloperTool=AzureCli
用于开发人员,RunAs=App;
用于管理服务身份(自动以天蓝色)。
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);