Authentifizierung am Server¶
Unter diesem Thema wird beschrieben, wie Sie sich beim Server authentifizieren, wenn Sie die Snowflake-SQL-API verwenden.
Wenn Sie eine Anforderung senden, muss diese Authentifizierungsinformationen enthalten. In den nächsten Abschnitten wird erläutert, wie Sie diese Informationen zur Anforderung hinzufügen:
Verwenden von OAuth¶
Um OAuth zu verwenden, führen Sie die folgenden Schritte aus:
Richten Sie OAuth für die Authentifizierung ein.
Weitere Informationen zum Einrichten von OAuth und Abrufen eines OAuth-Tokens finden Sie unter Einführung in OAuth.
Verwenden Sie Snowflake CLI, um zu überprüfen, ob Sie ein generiertes OAuth-Token für die Verbindung mit Snowflake verwenden können:
Für Linux- und MacOS-Systeme
Für Windows-Systeme
Legen Sie in jeder API-Anforderung, die Sie senden, die folgenden Header fest:
Authorization: Bearer oauth_tokenWobei
oauth_tokendas generierte OAuth-Token ist.(Optional)
X-Snowflake-Authorization-Token-Type: OAUTHWenn Sie die Kopfzeile
X-Snowflake-Authorization-Token-Typeweglassen, bestimmt Snowflake den Token-Typ, indem es das Token untersucht.Auch wenn diese Kopfzeile optional ist, können Sie sie angeben. Sie können die Kopfzeile auf einen der folgenden Werte setzen:
KEYPAIR_JWT(für Schlüsselpaar-Authentifizierung)OAUTH(für OAuth)PROGRAMMATIC_ACCESS_TOKEN(für programmatische Zugriffstokens)
Verwenden der Schlüsselpaar-Authentifizierung¶
Um die Schlüsselpaar-Authentifizierung zu verwenden, führen Sie die folgenden Schritte aus:
Richten Sie die Schlüsselpaar-Authentifizierung ein.
Als Teil dieses Prozesses müssen Sie Folgendes tun:
Generieren Sie ein öffentlich-privates Schlüsselpaar. Der generierte private Schlüssel muss sich in einer Datei befinden (z. B. mit dem Namen
rsa_key.p8).Weisen Sie den öffentlichen Schlüssel Ihrem Snowflake-Benutzer zu. Nachdem Sie dem Benutzer den Schlüssel zugewiesen haben, führen Sie den Befehl DESCRIBE USER aus. In der Ausgabe muss die Eigenschaft
RSA_PUBLIC_KEY_FPauf den Fingerabdruck des dem Benutzer zugewiesenen öffentlichen Schlüssels gesetzt sein.
Eine Anleitung zum Generieren des Schlüsselpaars und zum Zuweisen eines Schlüssels an einen Benutzer finden Sie unter Schlüsselpaar-Authentifizierung und Schlüsselpaar-Rotation. Sprachspezifische Beispiele für das Erstellen eines Fingerabdrucks und das Generieren eines JWT-Tokens finden Sie unter:
Verwenden Sie Snowflake CLI, um zu überprüfen, ob Sie den generierten privaten Schlüssel verwenden können, um eine Verbindung zu Snowflake herzustellen:
Der Befehl fordert Sie auf, eine Passphrase für den privaten Schlüssel einzugeben, um die Verbindung herzustellen. Sie können die Aufforderung vermeiden, indem Sie die Passphrase in der Umgebungsvariablen
PRIVATE_KEY_PASSPHRASEangeben.In Ihrem Anwendungscode:
Generieren Sie den Fingerabdruck (einen SHA-256-Hash) des öffentlichen Schlüssels für den Benutzer. Stellen Sie dem Fingerabdruck das Präfix
SHA256:voran. Beispiel:SHA256:hashSie können auch den SQL-Befehl DESCRIBE USER ausführen, um den Wert aus der Eigenschaft RSA_PUBLIC_KEY_FP abzurufen.
Generieren Sie ein JSON Web Token (JWT) mit den folgenden Feldern in der Nutzlast (Payload):
Feld
Beschreibung
Beispiel
issAussteller des JWT. Setzen Sie dies auf den folgenden Wert:
account_identifier.user.SHA256:public_key_fingerprintWobei:
account_identifierist Ihr Snowflake-Kontobezeichner.Wenn Sie den Konto-Locator verwenden, schließen Sie alle Regionsinformationen aus dem Konto-Locator aus.
userist Ihr Snowflake-Benutzername.SHA256:public_key_fingerprintist der Fingerabdruck, den Sie im vorherigen Schritt generiert haben.
Bemerkung
Für die Werte
account_identifierunduserdürfen nur Großbuchstaben verwendet werden. Wenn Ihre Konto-ID Punkte (.) enthält, müssen Sie diese durch Bindestriche (-) ersetzen, da Punkte in einem Kontobezeichner die JWT ungültig machen.MYORGANIZATION-MYACCOUNT.MYUSER.SHA256:public_key_fingerprintsubSubjekt des JWT. Setzen Sie dies auf den folgenden Wert:
account_identifier.userMYORGANIZATION-MYACCOUNT.MYUSERiatAusstellungszeit des JWT in UTC. Setzen Sie den Wert auf den aktuellen Zeitwert, entweder in Sekunden oder Millisekunden.
1615370644(Sekunden) .1615370644000(Millisekunden)expAblaufzeit des JWT in UTC. Sie können den Wert entweder in Sekunden oder Millisekunden angeben.
Bemerkung
Hinweis: Das JWT ist maximal eine Stunde nach Ausstellung des Tokens gültig, auch wenn Sie eine längere Ablaufzeit angeben.
1615374184(Sekunden) .1615374184000(Millisekunden)Legen Sie in jeder API-Anforderung, die Sie senden, die folgenden Header fest:
Authorization: Bearer JWTwobei
JWTdas Token ist, das Sie generiert haben.(Optional)
X-Snowflake-Authorization-Token-Type: KEYPAIR_JWTWenn Sie die Kopfzeile
X-Snowflake-Authorization-Token-Typeweglassen, bestimmt Snowflake den Token-Typ, indem es das Token untersucht.Auch wenn diese Kopfzeile optional ist, können Sie sie angeben. Sie können die Kopfzeile auf einen der folgenden Werte setzen:
KEYPAIR_JWT(für Schlüsselpaar-Authentifizierung)OAUTH(für OAuth)PROGRAMMATIC_ACCESS_TOKEN(für programmatische Zugriffstokens)
Python-Beispiel¶
In den folgenden Abschnitten wird beschrieben, wie Sie mit Python einen JWT und einen Fingerabdruck generieren.
Ein Beispiel für das Generieren eines JWT in Python finden Sie unter sql-api-generate-jwt.py. In diesem sql-api-generate-jwt.py-Beispiel wird das PyJWT-Modul verwendet, das Sie installieren können, indem Sie Folgendes ausführen:
Generieren eines JWT in Python¶
Die folgenden Codeauszüge zeigen, wie ein JWT generiert wird. Ein vollständiges Beispiel finden Sie unter sql-api-generate-jwt.py.
Bemerkung
Dieses Beispiel soll nur als Referenz dienen. Verwenden Sie diesen Code nicht in Produktionsanwendungen oder -umgebungen.
Generieren eines Fingerabdrucks in Python¶
Die folgenden Codeauszüge zeigen, wie der Fingerabdruck generiert wird. Ein vollständiges Beispiel finden Sie unter sql-api-generate-jwt.py.
Snowflake CLI-Beispiel¶
Sie können mit dem Befehl Snowflake CLI snow connection generate-jwt einen JWT für die Schlüsselpaar-Authentifizierung generieren. Weitere Informationen dazu finden Sie unter snow connection generate-jwt.
Dieses Beispiel generiert ein Token für das TEST-Konto und den JDOE-Benutzer, wobei der private Schlüssel von rsa_key.p8 verwendet wird:
Der Befehl fordert Sie auf, eine Passphrase für den privaten Schlüssel einzugeben, um die Verbindung herzustellen. Sie können die Aufforderung vermeiden, indem Sie die Passphrase in der Umgebungsvariablen PRIVATE_KEY_PASSPHRASE angeben.
Java-Beispiel¶
Ein Beispiel für das Generieren eines JWT in Java finden Sie unter SimpleStatementsApi.java.
Bemerkung
Dieses Beispiel soll nur als Referenz dienen. Verwenden Sie diesen Code nicht in Produktionsanwendungen oder -umgebungen.
In diesem Beispiel werden die folgenden Bibliotheken von Drittanbietern verwendet:
Swagger Codegen: eine Open-Source-Bibliothek für die Entwicklung von REST-APIs und Anwendungen.
Auth0: Bietet Java-APIs zum Authentifizieren und Generieren von JWT-Tokens.
Node.js-Beispiel¶
Ein Beispiel für das Generieren eines JWT in Node.js finden Sie unter sql-api-generate-jwt.js.
Bemerkung
Dieses Beispiel soll nur als Referenz dienen. Verwenden Sie diesen Code nicht in Produktionsanwendungen oder -umgebungen.