Autenticazione Keyvault tramite nome utente e password

Aug 23 2020

Il cliente ha creato un insieme di credenziali delle chiavi e memorizza le credenziali. Per autenticare il key vault, ho creato l'applicazione nel nodo e utilizzando l'id client e il client secret, sono in grado di leggere i segreti. Ma ora il cliente desidera non utilizzare l'id client e il segreto client, ma utilizzare il nome utente e la password di AZURE per accedere al keyvault nel programma. È un utente dedicato per l'accesso al keyvault senza MFA.

Non sono sicuro se possiamo accedere al keyvault con nome utente e password dal nodo js. Si prega di suggerire.

Grazie

Risposte

2 HuryShen Aug 24 2020 at 11:45

Per questo requisito, penso anche che l'uso del flusso nome utente-password non sia necessario e il flusso delle credenziali del client dovrebbe essere migliore (come menzionato da juunas nei commenti). Ma se il cliente desidera ancora utilizzare il flusso nome utente-password per l'implementazione, posso fornire un esempio come di seguito come riferimento:

1. È necessario registrare un'app in AD con piattaforma nativa ma non piattaforma web.

E controlla se " Tratta l'applicazione come client pubblico " è abilitato.

Se la tua app è una piattaforma web, quando esegui il codice node js mostrerà un messaggio di errore per chiederti di fornire "client secret" anche se usi il flusso username-password.

2. È necessario aggiungere l'autorizzazione Azure Key Vault all'app.

E non dimenticare di concedere il consenso dell'amministratore per questo.

3. Quindi puoi fare riferimento al codice qui sotto per ottenere il valore segreto.

const KeyVault = require('azure-keyvault');
const { AuthenticationContext } = require('adal-node');

const clientId = '<clientId>';
const username = '<username>';
const password = '<password>';
var secretAuthenticator = function (challenge, callback) {
    var context = new AuthenticationContext(challenge.authorization);
    return context.acquireTokenWithUsernamePassword(challenge.resource, username, password, clientId, function(
        err,
        tokenResponse,
    ) {
        if (err) throw err;

        var authorizationValue = tokenResponse.tokenType + ' ' + tokenResponse.accessToken;
        return callback(null, authorizationValue);
    });
};

var credentials = new KeyVault.KeyVaultCredentials(secretAuthenticator);
var client = new KeyVault.KeyVaultClient(credentials);
client.getSecret("https://<keyvaultname>.vault.azure.net/", "<secret name>", "<secret version>", function (err, result) {
    if (err) throw err;

    console.log("secret value is: " + result.value);
});