Node.js 使用nodejs从Azure Keyvault获取机密
我需要阅读Azure active directory中的用户列表。客户已经创建了一个Graph API应用程序,但他们不想共享应用程序的客户机密,而是要求我们使用密钥库。如何从node.js应用程序访问密钥以检索用户列表 我尝试了下面的一个,但给出了错误,我不知道如何进行身份验证Node.js 使用nodejs从Azure Keyvault获取机密,node.js,azure,azure-active-directory,azure-keyvault,Node.js,Azure,Azure Active Directory,Azure Keyvault,我需要阅读Azure active directory中的用户列表。客户已经创建了一个Graph API应用程序,但他们不想共享应用程序的客户机密,而是要求我们使用密钥库。如何从node.js应用程序访问密钥以检索用户列表 我尝试了下面的一个,但给出了错误,我不知道如何进行身份验证 const { DefaultAzureCredential } = require("@azure/identity"); const { SecretClient } = require(&q
const { DefaultAzureCredential } = require("@azure/identity");
const { SecretClient } = require("@azure/keyvault-secrets");
const credential = new DefaultAzureCredential();
const vaultName = "lsm-keyvault";
const url = `https://${vaultName}.vault.azure.net`;
const client = new SecretClient(url, credential);
const secretName = "Demo";
async function main() {
const result = await client.setSecret(secretName, "MySecretValue", {
enabled: false
});
console.log(result)
}
您只需执行以下步骤:
- 从应用程序注册在Azure Active Directory(服务主体)中创建应用程序
- 转到密钥库资源,访问策略刀片,将读取权限分配给我们在上述步骤中创建的此Azure AD应用程序(服务主体)
- 在您的应用程序服务中设置这3个环境变量
,AZURE\u客户端\u ID
,以及AZURE\u租户\u ID
。从我们在步骤1中创建的应用程序中获取这些变量的值AZURE\u客户端\u SECRET
- 使用我们现在已经使用的
。这将自动从我们在应用程序服务中为身份验证定义的环境变量中选择凭据DefaultAzureCredential
DefaultAzureCredential
将自动使用环境变量
因此,在您的情况下,您需要设置,AZURE\u客户端\u ID
,AZURE\u客户端\u SECRET
,以及AZURE\u租户\u ID
对于您得到的403错误,我注意到您说,它作为复合实体添加
,根据我的经验,您没有将与广告应用程序相关的正确服务主体正确添加到keyvault的访问策略
。如果添加正确,它将显示为应用程序
,而不是复合标识
因此,当您添加它时,您可以直接搜索客户端Id(即应用程序Id)
或应用程序注册的名称
,确保您添加了正确的。我在这里给出了细节,你可以参考一下
要执行此操作,Get
权限就足够了,代码应该是
const retrievedSecret = await client.getSecret(secretName);
我注意到您使用了client.setSecret
在您的代码中,它用于,要使用它,您可能需要Set
权限
有关更多详细信息,请参阅
更新:
我最终需要部署它,但不是在azure中,而是在另一个环境中。如何设置环境变量并访问它
如果是这样,您需要更改代码以进行身份验证,请直接在代码中使用这三个值
换行
const { DefaultAzureCredential } = require("@azure/identity");
const credential = new DefaultAzureCredential();
到
请参阅-谢谢Ankush。我得到下面的错误。我已添加具有所有权限的访问策略。它添加为一个复合实体,但我仍然得到以下错误{“name”:“RestError”,“code”:“禁止”,“statusCode”:403,“请求”:{“streamResponseBody”:false,“url”:“method”:“get”,“headers”:{“content type”:{“name”:“content type”,“value”:“application/json;charset=utf-8”},你完成所有步骤了吗?在哪一刻,你收到了这个错误?我已经完成了所有步骤。在运行应用程序时,我收到了这个错误。你在哪里运行代码?在本地或azure web应用程序中?@JoyWang;在本地谢谢。你是对的。我创建了一个具有正确权限的新应用程序。它成功了。我还有最后一个问题,现在我需要设置envi本地环境变量才能使其工作。我最终需要部署它,但不是在azure中,而是在另一个环境中。如何设置环境变量并访问它。
DefaultAzureCredential
将回退到ManagedEntityCredential
中,它应该在您要部署应用程序的环境中工作代码类似于VM或应用程序服务。请参阅
const { ClientSecretCredential } = require("@azure/identity");
const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);