首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在节点中使用Azure托管服务标识访问密钥库?

如何在节点中使用Azure托管服务标识访问密钥库?
EN

Stack Overflow用户
提问于 2018-02-06 04:18:14
回答 2查看 2.9K关注 0票数 3

我按照here的说明创建托管服务标识。所以现在在我的环境变量中,我有MSI_ENDPOINT和MSI_SECRET。

在我的typescript (node.js)项目中,我导入了以下项目:

代码语言:javascript
复制
import {KeyVaultCredentials, KeyVaultClient} from "azure-keyvault";
import {AuthenticationContext, ErrorResponse, TokenResponse} from "adal-node";

如果我没有使用MSI,我可以使用以下代码访问我的密钥库:

代码语言:javascript
复制
let keyVaultCredentials = new KeyVaultCredentials(KeyVault.createAuthenticator(this.clientID, this.clientKey));
let keyVaultClient = new KeyVaultClient(keyVaultCredentials);
private static createAuthenticator(clientID: string, clientKey: string){
  return (challenge, callback) => {
  let context = new AuthenticationContext(challenge.authorization);
  return context.acquireTokenWithClientCredentials(
      challenge.resource,
      clientID,
      clientKey,
      function (err, tokenResponse:TokenResponse | ErrorResponse) {
          if (err) {
              CLogger.log("error", "Error occurred while acquiring token with key vault credentials: " + JSON.stringify(err));
              throw new Error("Error occurred while acquiring token with key vault credentials. Check log files");
          }
          if(<TokenResponse>tokenResponse){
              let authorizationValue = (<TokenResponse>tokenResponse).tokenType + " " + (<TokenResponse>tokenResponse).accessToken;
              return callback(null, authorizationValue);
          }
      });
  }
}

我不知道如何在启用MSI的情况下获取访问令牌,请帮助。

EN

回答 2

Stack Overflow用户

发布于 2019-11-26 22:02:41

使用新的Azure SDK for js,您可以通过从package @azure/identity实现类DefaultAzureCredential来使用托管服务对您的应用程序进行身份验证。

代码语言:javascript
复制
const {DefaultAzureCredential} = require('@azure/identity');
const {SecretClient} = require('@azure/keyvault-secrets');

const credential = new DefaultAzureCredential();
  
const vaultName = "<key-vault-name>";
const url = `https://${vaultName}.vault.azure.net`;
  
const client = new SecretClient(url, credential);

client.setSecret(secretName, "MySecretValue");
........

它同时支持服务主体和托管身份验证。

要在本地环境中运行它,必须设置三个环境变量: AZURE_TENANT_ID、AZURE_CLIENT_ID和AZURE_CLIENT_SECRET,以便能够与服务主体连接。

在Azure上,如果没有定义这些变量,它将尝试使用托管身份进行身份验证。

有一个快速入门指南here

票数 4
EN

Stack Overflow用户

发布于 2018-02-06 05:23:24

从ms-rest-azure使用loginWithAppServiceMSI()方法将自动检测您是否在WebApp上,并从MSI端点获取令牌。然后,代码很简单:

代码语言:javascript
复制
function getKeyVaultCredentials(){
    return msRestAzure.loginWithAppServiceMSI({resource: 'https://vault.azure.net'});
}

function getKeyVaultSecret(credentials) {
    let keyVaultClient = new KeyVault.KeyVaultClient(credentials);
    return keyVaultClient.getSecret(KEY_VAULT_URI, 'secret', "");
}

getKeyVaultCredentials().then(
    getKeyVaultSecret
).then(function (secret){
    console.log(`Your secret value is: ${secret.value}.`);
}).catch(function (err) {
    throw (err);
});

我建议您查看完整的文档here

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48630804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档