gpt4 book ai didi

azure - 使用 Adal 代表用户访问 Azure KeyVault

转载 作者:行者123 更新时间:2023-12-01 17:32:34 27 4
gpt4 key购买 nike

以下内容位于控制台应用程序和 ClientID 中,RedirectUri 来自 Azure Active Directory 中创建的 native 应用程序。

var authContext = new AuthenticationContext(string.Format("https://login.windows.net/{0}","common"),new FileCache());
var token = authContext.AcquireToken("https://management.core.windows.net/", ClientID, RedirectUri, PromptBehavior.Auto);

我现在有了与管理 api 对话的 token 。

 using (var client = new KeyVaultManagementClient(new TokenCloudCredentials(SubscriptionId, token.AccessToken)))
{
var a = client.Vaults.List(resourceGroup, 10);
foreach(var vault in a.Vaults)
{
var vaultInfo = client.Vaults.Get(resourceGroup, vault.Name);
Console.WriteLine(JsonConvert.SerializeObject(vaultInfo.Vault, Formatting.Indented));
//Verifying that the AccessPolicies contains my object id (pasting idtoken into jwt.io and compare with oid claim) Success.

// Now its time to talk with keyvault
var keyvault = new KeyVaultClient(GetAccessTokenAsync);
var secrets = keyvault.GetSecretsAsync(vaultInfo.Vault.Properties.VaultUri).GetAwaiter().GetResult();

}

}


private static Task<string> GetAccessTokenAsync(string authority, string resource, string scope)
{
var context = new AuthenticationContext(authority, new FileCache());
var result = context.AcquireToken(resource, new ClientCredential(AppClientId,AppKey));

return Task.FromResult(result.AccessToken);

}

以上方法有效,但需要我在我的 AD 上创建一个可以与 keyvault 通信的单独应用程序。我想使用自己的 ID 与 keyvault 进行通信,但我不知道如何获取 keyvault 客户端所需的访问 token 。

我是否需要更新 azure manuel 上的 list 并添加允许我的控制台应用程序代表用户获取 keyvault 的 token ?需要在 GetAccessTokenAsync 中更改哪些代码才能使其正常工作。

我尝试仅向其提供来自公共(public)端点的初始 token 请求中的访问 token 或 ID token 。有人对如何代表我自己的 ID 而不是应用程序与 azure key Vault 进行对话有一些建议吗?

更新

因此,查看 header ,我发现我的 token 缺少Vault.azure.net 作为资源,因此尝试:

var testtoken = authContext.AcquireToken("https://vault.azure.net", ClientID, RedirectUri);

出现以下错误:

AADSTS65005: The client application has requested access to resource 'https://vault.azure.net'. This request has failed because the client has not specified this resource in its requiredResourceAccess list.

并查看当前 list :

"requiredResourceAccess": [
{
"resourceAppId": "797f4846-ba00-4fd7-ba43-dac1f8f63013",
"resourceAccess": [
{
"id": "41094075-9dad-400e-a0bd-54e686782033",
"type": "Scope"
}
]
},
{
"resourceAppId": "00000002-0000-0000-c000-000000000000",
"resourceAccess": [
{
"id": "311a71cc-e848-46a1-bdf8-97ff7156d8e6",
"type": "Scope"
}
]
}
],

我如何知道 keyvault 的作用域和 ResourceAppId 使用哪些 guid?

临时解决方案

在我知道如何获取resourceAppId和相关信息之前,我正在使用模拟powershell工具的老技巧。

 var vaultToken = authContext.AcquireToken("https://vault.azure.net", "1950a258-227b-4e31-a9cf-717495945fc2", new Uri("urn:ietf:wg:oauth:2.0:oob"));
var keyvault = new KeyVaultClient((_, b, c) => Task.FromResult(vaultToken.AccessToken));
var secrets = keyvault.GetSecretsAsync(vaultInfo.Vault.Properties.VaultUri).GetAwaiter().GetResult();

来源:http://www.s-innovations.net/Blog/2014/02/12/Controlling-the-login-flow-when-using-ADAL-for-WAML在使用 powershells clientid 之前,另请阅读博客文章中的 @bradygaster 评论。

最佳答案

你走在正确的道路上!您需要配置 AAD,以便能够专门授权用户访问 KeyVault。尝试将以下内容添加到您的 list 中。

{
"resourceAppId": "cfa8b339-82a2-471a-a3c9-0fc0be7a4093",
"resourceAccess": [
{
"id": "f53da476-18e3-4152-8e01-aec403e6edc0",
"type": "Scope"
}
]
}

如果这不起作用,您可以通过访问 the old portal 以老式方式执行此操作,导航到 AAD、AAD 租户、应用程序,然后在“配置”选项卡的“其他应用程序的权限”部分下添加“Azure Key Vault”。

关于azure - 使用 Adal 代表用户访问 Azure KeyVault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30096576/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com