MKN*_*MKN 1 azure node.js azure-active-directory azure-keyvault
我需要读取 Azure 活动目录中的用户列表。客户已经创建了一个 Graph API 应用程序,但他们不想共享该应用程序的客户端密钥,而是要求我们使用 Key Vault。如何从 node.js 应用程序访问密钥来检索用户列表?
我尝试了下面的方法,但出现错误,我不知道如何进行身份验证。
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)
}
Run Code Online (Sandbox Code Playgroud)
好吧,如果您在本地运行代码,DefaultAzureCredential将自动使用环境变量。
因此,在您的情况下,您需要向 Azure AD 注册一个应用程序,并获取tenant id、client id(i.e. application id)、client secret(i.e. application secret)、 设置环境变量、 AZURE_CLIENT_ID、AZURE_CLIENT_SECRET和AZURE_TENANT_ID。
对于您收到的 403 错误,我注意到您说It added as a compound entity,根据我的经验,您没有将与 AD 应用程序相关的正确服务主体正确添加到Access policieskeyvault 中。如果添加正确,它将显示为APPLICATION,而不是COMPOUND IDENTITY。
所以添加的时候可以直接搜索client Id(i.e. application Id)或the name of your App Registration,确保添加正确。我在这个类似问题里已经详细介绍过,你可以参考一下。
要检索秘密,Get权限足够,代码应该是
const retrievedSecret = await client.getSecret(secretName);
Run Code Online (Sandbox Code Playgroud)
我注意到您client.setSecret在代码中使用它,它用于保存秘密,要使用它,您可能需要许可Set。
有关更多详细信息,请参阅快速入门:适用于 Node.js (v4) 的 Azure Key Vault 客户端库。
更新:
我最终必须部署它,但不是在天蓝色中,而是在另一个环境中。如何设置环境变量并访问它。
如果是这样,您需要更改代码进行身份验证,直接在代码中使用这三个值。
改变线路
const { DefaultAzureCredential } = require("@azure/identity");
const credential = new DefaultAzureCredential();
Run Code Online (Sandbox Code Playgroud)
到
const { ClientSecretCredential } = require("@azure/identity");
const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
Run Code Online (Sandbox Code Playgroud)
请参阅 - https://www.npmjs.com/package/@azure/identity/v/1.0.3#authenticating-as-a-service-principal
| 归档时间: |
|
| 查看次数: |
5911 次 |
| 最近记录: |