Authentifizieren von Verbindungen¶
Für die Authentifizierung bei Snowflake können Sie eine der folgenden Optionen verwenden:
Kennwortbasierte Authentifizierung.
Um diese Methode zu verwenden, stellen Sie beim Aufbau der Verbindung die
password
-Option ein.Single Sign-On (SSO) über einen Webbrowser
Natives SSO über Okta
Außerdem unterstützt der Snowflake Node.js-Treiber die Möglichkeit, SSO- und MFA-Token zu cachen. Weitere Informationen dazu finden Sie unter Cache für Authentifizierung mit Token.
Verwenden Sie Single Sign-On (SSO) über einen Webbrowser¶
Wenn Sie Snowflake für die Verwendung von Single Sign-On (SSO) konfiguriert haben, können Sie Ihre Clientanwendung so konfigurieren, dass browserbasiertes SSO für die Authentifizierung verwendet wird.
In Ihrem Anwendungscode:
Setzen Sie die Option
authenticator
aufEXTERNALBROWSER
.Rufen Sie zum Herstellen einer Verbindung die Methode
connectAsync
und nicht die Methodeconnect
auf.
Beispiel:
// Use a browser to authenticate via SSO.
var connection = snowflake.createConnection({
...,
authenticator: "EXTERNALBROWSER"
});
// Establish a connection. Use connectAsync, rather than connect.
connection.connectAsync(
function (err, conn)
{
... // Handle any errors.
}
).then(() =>
{
// Execute SQL statements.
var statement = connection.execute({...});
});
Weitere Informationen zur Verwendung von browserbasiertem SSO für die Authentifizierung finden Sie unter Browser-basiertes SSO.
Verwenden Sie native SSO über Okta.¶
Wenn Sie Snowflake für die Verwendung von Single Sign-On (SSO) konfiguriert haben, und zwar über Okta, können Sie Ihre Clientanwendung so konfigurieren, dass sie die native SSO-Authentifizierung über Okta verwendet.
In Ihrem Anwendungscode:
Legen Sie die folgenden Optionen fest:
Setzen Sie die Option
authenticator
auf den Okta-URL-Endpunkt für Ihr Okta-Konto (z. B.https://<Name_des_Okta-Kontos>.okta.com
).Setzen Sie die Optionen
username
undpassword
auf den Benutzernamen und das Kennwort für Ihren Identitätsanbieter (IdP).
Rufen Sie zum Herstellen einer Verbindung die Methode
connectAsync
und nicht die Methodeconnect
auf.
Beispiel:
// Use native SSO authentication through Okta.
var connection = snowflake.createConnection({
...,
username: '<user_name_for_okta>',
password: '<password_for_okta>',
authenticator: "https://myaccount.okta.com"
});
// Establish a connection.
connection.connectAsync(
function (err, conn)
{
... // Handle any errors.
}
);
// Execute SQL statements.
var statement = connection.execute({...});
Weitere Informationen zur Verwendung der nativen SSO-Authentifizierung über Okta finden Sie unter Natives SSO – Nur Okta.
Verwenden Sie Authentifizierung von Schlüsselpaaren und Schlüsselpaar-Rotation¶
Der Treiber unterstützt Schlüsselpaar-Authentifizierung und Schlüsselrotation. Führen Sie die folgenden Schritte aus, um die Schlüsselpaar-Authentifizierung und die Schlüsselrotation zu verwenden:
Konfigurieren Sie die Schlüsselpaar-Authentifizierung, wie unter Schlüsselpaar-Authentifizierung und Schlüsselpaar-Rotation erläutert.
In Ihrem Anwendungscode:
Setzen Sie die Option
authenticator
aufSNOWFLAKE_JWT
.Verwenden Sie den privaten Schlüssel zur Authentifizierung auf eine der folgenden Arten:
Setzen Sie die Option
privateKey
auf den privaten Schlüssel.Setzen Sie die Option
privateKeyPath
auf den Pfad zur Datei des privaten Schlüssels.Wenn die Datei verschlüsselt ist, müssen Sie auch die Option
privateKeyPass
auf die Passphrase setzen, um den privaten Schlüssel zu entschlüsseln.
Im folgenden Beispiel wird der private Schlüssel aus einer Datei geladen und die Option
privateKey
auf den privaten Schlüssel gesetzt:// Read the private key file from the filesystem. var crypto = require('crypto'); var fs = require('fs'); var privateKeyFile = fs.readFileSync('<path_to_private_key_file>/rsa_key.p8'); // Get the private key from the file as an object. const privateKeyObject = crypto.createPrivateKey({ key: privateKeyFile, format: 'pem', passphrase: 'passphrase' }); // Extract the private key from the object as a PEM-encoded string. var privateKey = privateKeyObject.export({ format: 'pem', type: 'pkcs8' }); // Use the private key for authentication. var connection = snowflake.createConnection({ ... authenticator: "SNOWFLAKE_JWT", privateKey: privateKey }); // Establish a connection. connection.connect( function (err, conn) { ... // Handle any errors. } ); // Execute SQL statements. var statement = connection.execute({...});Im folgenden Beispiel wird die Option
privateKeyPath
auf eine verschlüsselte Datei mit privatem Schlüssel gesetzt und die OptionprivateKeyPass
auf die Passphrase gesetzt, die zum Entschlüsseln des privaten Schlüssels verwendet wird:// Use an encrypted private key file for authentication. // Specify the passphrase for decrypting the key. var connection = snowflake.createConnection({ ... authenticator: "SNOWFLAKE_JWT", privateKeyPath: "<path-to-privatekey>/privatekey.p8", privateKeyPass: '<passphrase_to_decrypt_the_private_key>' }); // Establish a connection. connection.connect( function (err, conn) { ... // Handle any errors. } ); // Execute SQL statements. var statement = connection.execute({...});
Verwenden von OAuth¶
Um eine Verbindung mit OAuth herzustellen, setzen Sie die Option authenticator
auf OAUTH
und die Option token
auf das OAuth-Zugriffstoken. Beispiel:
// Use OAuth for authentication.
var connection = snowflake.createConnection({
...
authenticator: "OAUTH",
token: "<your_oauth_token>"
});
// Establish a connection.
connection.connect(
function (err, conn)
{
... // Handle any errors.
}
);
// Execute SQL statements.
var statement = connection.execute({...});
Weitere Informationen dazu finden Sie unter Clients, Treiber und Konnektoren.
Verwenden Sie eine MFA Kennung¶
Bemerkung
Dieses Feature erfordert Snowflake Node.js-Treiber Version 1.13.1 oder höher.
Sie können eine Verbindung zu Snowflake herstellen, indem Sie eine mehrstufige Authentifizierung (MFA) als Kennung angeben, anstatt auf eine externe Bestätigung zu warten, z. B. eine Push-Benachrichtigung von Duo. Der Treiber bietet die folgenden Möglichkeiten, eine Kennung für MFA anzugeben:
Setzen Sie die Option
passcodeInPassword
auftrue
und fügen Sie das Kennwort als Teil der Zeichenfolge ein, ähnlich wie im Folgenden:const connection = snowflake.createConnection({ account: process.env.SNOWFLAKE_TEST_ACCOUNT, username: process.env.SNOWFLAKE_TEST_USER, ... authenticator: 'USERNAME_PASSWORD_MFA', password: "abc123987654", // passcode 987654 is part of the password passcodeInPassword: true // because passcodeInPassword is true });
Setzen Sie die Option
passcode
auf den Wert des Kennworts, um das Kennwort und die Kennung getrennt anzugeben, ähnlich wie im Folgenden:const connection = snowflake.createConnection({ account: process.env.SNOWFLAKE_TEST_ACCOUNT, username: process.env.SNOWFLAKE_TEST_USER, ... authenticator: 'USERNAME_PASSWORD_MFA', password: "abc123", // password and MFA passcode are input separately passcode: "987654" });
Um diesen Ansatz zu verwenden, stellen Sie sicher, dass die Option
passcodeInPassword
auffalse
(der Standardwert) eingestellt ist.
Bemerkung
Wenn Sie die Option passcodeInPassword
aktivieren und die Option Kennung
einstellen, hat die Option passcodeInPassword
Vorrang.
Weitere Informationen zu diesen Optionen finden Sie unter passcode.
Cache für Authentifizierung mit Token¶
Der Snowflake Node.js-Treiber bietet die Möglichkeit, die Token SSO und MFA zu cachen.
Wichtig
Der Cache für Token ist standardmäßig deaktiviert. Das lokale Cachen von Token erhöht das Sicherheitsrisiko. Da Token erst nach vier Stunden ablaufen, kann sich jemand, der auf ein Token auf einem lokalen System zugreift, als der Eigentümer des Tokens ausgeben, bis der Token natürlich abläuft. Bevor Sie sich für das Cachen von Token entscheiden, sollten Sie daher Folgendes bedenken:
Seien Sie sich der potenziellen Risiken bewusst und achtsam.
Wenden Sie sich an Ihr internes Sicherheits- und Compliance-Personal, um zu prüfen, ob die Richtlinien Ihrer Organisation das Cachen von Token erlauben.
In der Standardeinstellung wird die Datei, in der die gecachten Token gespeichert werden, in Ihr
$HOME
-Verzeichnis oder in einen von Ihnen konfigurierten Pfad geschrieben. Sie sind für die Sicherheit der Daten in dem angegebenen Verzeichnis verantwortlich.Sie sind dafür verantwortlich, dass die Datei über die richtigen Berechtigungen verfügt, damit nur der Eigentümer der Datei darauf zugreifen kann.
Cache-SSO (ID)-Token¶
Ein SSO (ID)-Token wird aus der Anfrage generiert, wenn Sie eine Verbindung zu Snowflake mit externer Authentifizierung im Browser herstellen. Das Zwischenspeichern von SSO (ID)-Token auf der Seite des Client-Treibers funktioniert nur, wenn der Server das Zwischenspeichern erlaubt. Das Caching von SSO-Token kann serverseitig durch Ausführung der folgenden SQL-Anweisung aktiviert werden, wie in Verwenden von SSO bei Clientanwendungen, die sich mit Snowflake verbinden beschrieben:
ALTER ACCOUNT SET ALLOW_ID_TOKEN = TRUE;
Um einen SSO-Token-Cache im Node.js-Treiber zu verwenden, stellen Sie die folgenden Optionen im snowflake.createConnection()
-Aufruf ein:
Setzen Sie
Authentifikator
aufEXTERNALBROWSER
. Weitere Details dazu finden Sie unter Authentifizierungsoptionen.Setzen Sie
clientStoreTemporaryCredential
auftrue
.
const connection = snowflake.createConnection({
account: process.env.SNOWFLAKE_TEST_ACCOUNT,
username: process.env.SNOWFLAKE_TEST_USER,
database: process.env.SNOWFLAKE_TEST_DATABASE,
schema: process.env.SNOWFLAKE_TEST_SCHEMA,
warehouse: process.env.SNOWFLAKE_TEST_WAREHOUSE,
authenticator: 'EXTERNALBROWSER',
clientStoreTemporaryCredential: true,
});
Wenn diese Option aktiviert ist, verwendet der Treiber das gecachte Token für nachfolgende Verbindungen, bis das Token abläuft. Wenn der Treiber einen Browser öffnet, um die Verbindung erneut zu authentifizieren, kann der Treiber entweder die Anmeldeinformationen im lokalen Speicher nicht finden oder das Token ist abgelaufen.
Cache-MFA-Token¶
Ein MFA-Token wird aus der Anfrage generiert, wenn Sie eine Verbindung zu Snowflake mit USERNAME_PASSWORD_MFA-Authentifizierung herstellen. Das Zwischenspeichern von MFA-Token auf der Seite des Client-Treibers funktioniert nur, wenn der Server das Zwischenspeichern erlaubt. Das Caching von MFA-Token kann serverseitig durch Ausführung der folgenden SQL-Anweisung aktiviert werden, wie in Verwenden von MFA-Tokencaching zur Minimierung der Anzahl von Eingabeaufforderungen bei der Authentifizierung – Optional beschrieben:
ALTER ACCOUNT SET ALLOW_CLIENT_MFA_CACHING = TRUE;
Um einen MFA-Token-Cache im Node.js-Treiber zu verwenden, stellen Sie die folgenden Optionen im snowflake.createConnection()
-Aufruf ein:
Setzen Sie
Authentifikator
aufUSERNAME_PASSWORD_MFA
. Weitere Details dazu finden Sie unter Authentifizierungsoptionen.Setzen Sie
clientRequestMFAToken
auftrue
.
const connection = snowflake.createConnection({
account: process.env.SNOWFLAKE_TEST_ACCOUNT,
username: process.env.SNOWFLAKE_TEST_USER,
database: process.env.SNOWFLAKE_TEST_DATABASE,
schema: process.env.SNOWFLAKE_TEST_SCHEMA,
warehouse: process.env.SNOWFLAKE_TEST_WAREHOUSE,
authenticator: 'USERNAME_PASSWORD_MFA',
clientRequestMFAToken: true,
});
Wenn diese Option aktiviert ist, verwendet der Treiber das gecachte Token für nachfolgende Verbindungen, bis das Token abläuft. Wenn sich der Treiber erneut an den MFA-Anbieter wendet, kann er entweder die Token-Informationen nicht im lokalen Speicher für Anmeldeinformationen finden oder das Token ist abgelaufen.
Verwenden Sie den standardmäßigen Anmeldeinformationen-Manager¶
Der Snowflake Node.js-Treiber bietet einen Manager für Anmeldeinformationen und einen Speicher für Anmeldeinformationen. Standardmäßig speichert der Treiber gecachte Token in Ihrem $HOME
-Verzeichnis. Derzeit unterstützt der Treiber das Cachen von Token nur mit der connectAsync()
-Funktion.
Wenn Sie die gecachten Token an einem anderen Speicherort speichern möchten, können Sie den gewünschten Speicherort im credentialCacheDir
-Parameter der snowflake.createConnection()
Funktion angeben. Sie können entweder einen relativen oder einen absoluten Pfad angeben, wie unten gezeigt:
Relativer Pfad
const connection = snowflake.createConnection({ credentialCacheDir: "../../<folder name>", });
Absoluter Pfad
const connection = snowflake.createConnection({ credentialCacheDir: "C:\\<folder name>\\<subfolder name>", });
Wenn Sie credentialCacheDir
nicht konfigurieren, verwendet der Snowflake Node.js-Treiber $HOME/temporary_credential.json
, um die Anmeldeinformationen zu speichern.
Verwenden Sie einen benutzerdefinierten Manager für Anmeldeinformationen¶
Der Snowflake node.js-Treiber bietet einen standardmäßigen Anmeldeinformationen-Manager, der eine lokale JSON-Datei zum Speichern der Anmeldeinformationen verwendet. Wenn explizit kein Anmeldeinformationen-Manager konfiguriert ist, verwendet der Treiber diesen standardmäßigen Anmeldeinformationen-Manager.
Wenn Sie nicht den Standard-Manager für Anmeldeinformationen verwenden möchten, können Sie einen eigenen Manager für Anmeldeinformationen erstellen. Ein benutzerdefinierter Manager für Anmeldeinformationen muss die folgenden Anforderungen erfüllen:
Er muss mindestens die Funktionen
read
,write
, undremove
enthalten. Sie können auch andere Funktionen hinzufügen.Es muss ein
object
-Datentyp sein.
Das folgende Beispiel zeigt eine Vorlage für einen minimalen benutzerdefinierten Manager für Anmeldeinformationen.
const sampleCustomManager = {
read: function (key) {
//(do something with the key)
return token;
},
write: function (key, token) {
//(do something with the key and token)
},
remove: function (key) {
//(do something with the key)
}
};
Nachdem Sie Ihren benutzerdefinierten Anmeldeinformationen-Manager fertiggestellt haben, können Sie ihn für den Treiber in der Methode snowflake.configure()
konfigurieren, wie gezeigt. Dieses Beispiel bezieht sich auf die MFA-Token. Sie können jedoch auch benutzerdefinierte Anmeldeinformationen für die SSO-Token erstellen.
const myCredentialManager = require('<your custom credential manager module>')
const snowflake = require('snowflake-sdk');
snowflake.configure({
customCredentialManager: myCredentialManager
})
const connection = snowflake.createConnection({
account: process.env.SNOWFLAKE_TEST_ACCOUNT,
database: process.env.SNOWFLAKE_TEST_DATABASE,
schema: process.env.SNOWFLAKE_TEST_SCHEMA,
warehouse: process.env.SNOWFLAKE_TEST_WAREHOUSE,
authenticator: 'USERNAME_PASSWORD_MFA',
clientRequestMFAToken: true,
});
Obwohl der Snowflake Node.js-Treiber eine Plugin-ähnliche Weboberfläche für die Implementierung und Verwendung benutzerdefinierter Anmeldeinformationen bereitstellt, ist Snowflake nicht für die Erstellung, Implementierung oder Unterstützung benutzerdefinierter Anmeldeinformationen für die Kunden verantwortlich.