Rob*_*Rob 5 c# azure .net-core service-principal azure-keyvault
我正在尝试使用服务原理(我有App Id和App Secret)从.net Core控制台应用程序访问KeyVault 。这是我的代码:
var client = new KeyVaultClient(GetAccessToken);
var secret = client.GetSecretAsync("https://{keyvaultName}.vault.azure.net", "MySecret").Result;
Run Code Online (Sandbox Code Playgroud)
哪个调用此函数:
private static async Task<string> GetAccessToken(string authority, string resource, string scope)
{
var context = new AuthenticationContext(authority, TokenCache.DefaultShared);
var credential = new ClientCredential(clientId: appId, clientSecret: appSecret);
var authResult = await context.AcquireTokenAsync(resource, credential);
return authResult.AccessToken;
}
Run Code Online (Sandbox Code Playgroud)
调用GetSecretAsync将返回“ AccessDenied ”异常。修改代码以使用此回调会产生“ 未经授权 ”异常:
private static async Task<string> GetAccessToken(string authority, string resource, string scope)
{
var context = new AuthenticationContext(authority, TokenCache.DefaultShared);
var credential = new ClientCredential(clientId: appId, clientSecret: appSecret);
**var authResult = await context.AcquireTokenAsync("https://management.core.windows.net/", credential);**
return authResult.AccessToken;
}
Run Code Online (Sandbox Code Playgroud)
我通过转到“ Azure”>“ AAD”>“应用程序注册 ”来设置服务原则,并在设置该原则时记下了应用程序ID和密码(应用程序密码)。
然后,在KeyVault中,我将原理添加到了访问控制(IAM)中,并拥有贡献者权限,但仍然不满意!
有人遇到过这种情况吗?
谢谢!:)
我用下面的代码测试它,它在我这边工作正常。resourceUri 是https://vault.azure.net.
static string appId = "xxxxxxxxxxxxx";
static string appSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
static string tenantId = "xxxxxxxxxxxxxxxxxxxxx";
public static void Main(string[] args)
{
var kv = new KeyVaultClient(GetAccessToken);
var scret = kv.GetSecretAsync("https://xxxxxx.vault.azure.net", "secretname").GetAwaiter().GetResult();
}
public static async Task<string> GetAccessToken(string azureTenantId, string clientId, string redirectUri)
{
var context = new AuthenticationContext("https://login.windows.net/" + tenantId);
var credential = new ClientCredential(appId, appSecret);
var tokenResult = await context.AcquireTokenAsync("https://vault.azure.net", credential);
return tokenResult.AccessToken;
}
Run Code Online (Sandbox Code Playgroud)
此外,您需要使用“Key Vault”向注册的应用程序添加权限。

在 Key Vault 通道中,您需要向已注册的应用程序或用户添加策略。在访问控制中,您需要为注册的应用程序或用户添加权限。

| 归档时间: |
|
| 查看次数: |
691 次 |
| 最近记录: |