Schlüsselpaar-Authentifizierung: Problembehandlung

Unter diesem Thema finden Sie Informationen zum Beheben von Problemen, die bei der Verbindung zu Snowflake mit der Schlüsselpaar-Authentifizierung auftreten. Dabei geht es vorrangig um Fehler, die JWT token is invalid enthalten.

Fehler finden

Vor der Problembehandlung müssen Sie feststellen, ob das Problem zu einem JWT token is invalid-Fehler führt.

Wenn Ihr Snowflake-Client ein Treiber oder Konnektor ist, der keine interaktive Schnittstelle hat, verwenden Sie Protokolle, um Verbindungsfehler zu untersuchen:

  1. Aktivieren Sie die Protokollierung für den Snowflake-Konnektor oder -Treiber. Weitere Informationen dazu finden Sie unter Protokolldateien für Snowflake-Treiber und -Konnektoren generieren (Snowflake Knowledge Base-Artikel).

  2. Prüfen Sie, ob Fehler vorliegen, die die Zeichenfolge JWT token is invalid enthalten.

    Ein Client, der den Snowflake-JDBC-Treiber verwendet, könnte beispielsweise den folgenden Fehler erhalten, wenn er versucht, die Schlüsselpaar-Authentifizierung zu verwenden:

    yyyy-mm-dd hh:mm:ss.nnn n.s.c.jdbc.SnowflakeSQLException FINE <init>:40 -
    Snowflake exception: JWT token is invalid. [0ce9eb56-821d-4ca9-a774-04ae89a0cf5a],
    sqlState:08001, vendorCode:390,144, queryId:
    

Zusätzliche Details abrufen

Jeder JWT token is invalid-Fehler enthält eine UUID, das in Klammern unmittelbar nach dem Fehler erscheint (z. B. JWT token is invalid. [0ce9eb56-821d-4ca9-a774-04ae89a0cf5a]). Sie sollten die UUID des Fehlers an einen Snowflake-Administrator weitergeben, damit dieser weitere Informationen zu dem Fehler erhalten kann.

Administratoren verwenden die Funktion SYSTEM$GET_LOGIN_FAILURE_DETAILS, um zusätzliche Details zu dem Fehler zu erhalten. Um zum Beispiel zusätzliche Informationen zum Fehler JWT token is invalid. [0ce9eb56-821d-4ca9-a774-04ae89a0cf5a] zu erhalten, kann ein Benutzer mit der Rolle ACCOUNTADIMN Folgendes ausführen:

SELECT JSON_EXTRACT_PATH_TEXT(SYSTEM$GET_LOGIN_FAILURE_DETAILS('0ce9eb56-821d-4ca9-a774-04ae89a0cf5a'), 'errorCode');
Copy

Die Funktion JSON_EXTRACT_PATH_TEXT analysiert die JSON-Ausgabe der Funktion SYSTEM$GET_LOGIN_FAILURE_DETAILS, um den Fehlercode und den Fehler zu ermitteln.

Liste der Fehler

Die Ausgabe der Funktion SYSTEM$GET_LOGIN_FAILURE_DETAILS ist eine der folgenden Fehlercode/Fehler-Kombinationen.

Fehlercode

Fehler

Beschreibung

390144

JWT_TOKEN_INVALID

Es gibt ein allgemeines Problem mit dem JWT-Token. Informationen zu möglichen Lösungen finden Sie unter Häufige Fehler und Lösungen.

394300

JWT_TOKEN_INVALID_USER_IN_ISSUER

Der im Aussteller angegebene Benutzername existiert nicht im Snowflake-Konto. Informationen zu möglichen Lösungen finden Sie unter Häufige Fehler und Lösungen.

394301

JWT_TOKEN_MISSING_ISSUE_OR_EXPIRATION_TIME

Das JWT-Token enthält weder einen Ausstellungs- noch einen Ablaufzeitpunkt.

394302

JWT_TOKEN_INVALID_ISSUE_TIME

Das JWT-Token wurde von Snowflake mehr als 60 Sekunden nach dem Ausstellungszeitpunkt empfangen. Informationen zu möglichen Lösungen finden Sie unter Häufige Fehler und Lösungen.

394303

JWT_TOKEN_INVALID_EXPIRATION_TIME

Das JWT-Token ist abgelaufen.

394304

JWT_TOKEN_INVALID_PUBLIC_KEY_FINGERPRINT_MISMATCH

Es besteht eine Diskrepanz zwischen dem Fingerabdruck des öffentlichen Schlüssels, der im Aussteller angegeben ist, und dem für den Benutzer in Snowflake gespeicherten Fingerabdruck. Informationen zu möglichen Lösungen finden Sie unter Häufige Fehler und Lösungen.

394305

JWT_TOKEN_INVALID_ALGORITHM

Das JWT-Token wurde nicht mit dem RS256-Algorithmus signiert.

394306

JWT_TOKEN_INVALID_SIGNATURE

Snowflake konnte die vom JWT-Token bereitgestellte Signatur nicht verifizieren. Es ist möglich, dass das JWT mit einem privaten Schlüssel signiert wurde, der nicht mit dem bereitgestellten öffentlichen Schlüssel gepaart ist. Es ist auch möglich, dass die JWT-Signatur beschädigt ist oder modifiziert wurde.

Häufige Fehler und Lösungen

Die häufigsten Fehler im Zusammenhang mit der Schlüsselpaar-Authentifizierung sind:

Verwenden Sie die folgenden Beschreibungen und Lösungen, um diese Fehler zu beheben.

JWT_TOKEN_INVALID

Beschreibung

Es gibt ein allgemeines Problem mit dem JWT-Token.

Lösung 1

Das Token selbst könnte fehlerhaft sein. Vergewissern Sie sich, dass die Anwendung, die auf Snowflake zugreift, gültige JWT-Tokens generiert.

Lösung 2

Vergewissern Sie sich, dass der Client (Treiber, Konnektor oder Anforderungs-URL) den korrekten Kontobezeichner für die Verbindung mit dem Snowflake-Konto verwendet. Sie sollten auch überprüfen, ob dieser Wert mit dem Kontobezeichner in der iss-Forderung übereinstimmt.

Lösung 3

Vergewissern Sie sich, dass der Kontobezeichner und der Benutzername in der sub-Forderung mit den entsprechenden Werten in der iss-Forderung übereinstimmen.

Lösung 4

Überprüfen besonders sorgfältig, ob der iss-Anspruch SHA256 als Signieralgorithmus angibt.

JWT_TOKEN_INVALID_PUBLIC_KEY_FINGERPRINT_MISMATCH

Beschreibung

Es besteht eine Diskrepanz zwischen dem Fingerabdruck des öffentlichen Schlüssels, der im Aussteller angegeben ist, und dem für den Benutzer in Snowflake gespeicherten Fingerabdruck.

Lösung

Ermitteln Sie den Fingerabdruck des öffentlichen Schlüssels des JWT-Tokens, und vergleichen Sie ihn dann mit dem Fingerabdruck, der dem Benutzer in Snowflake zugeordnet ist.

Eine Methode, den Fingerabdruck des JWT-Tokens zu erhalten, besteht darin, die DEBUG-Protokollierung für Ihren Treiber zu aktivieren und zu versuchen, sich anzumelden. Suchen Sie nach dem Muster SHA256:<hash>, wobei <hash> der Fingerabdruck des öffentlichen Schlüssels ist.

Um den Fingerabdruck des öffentlichen Schlüssels zu erhalten, der dem Benutzer in Snowflake zugeordnet ist, führen Sie den Befehl DESCRIBE USER aus. Der Fingerabdruck des öffentlichen Schlüssels befindet sich entweder in der Eigenschaft RSA_PUBLIC_KEY_FP oder in der Eigenschaft RSA_PUBLIC_KEY_2_FP. Wenn dem Benutzer ein Fingerabdruck des öffentlichen Schlüssels fehlt, führen Sie den Befehl ALTER USER aus, um diese Eigenschaften festzulegen.

JWT_TOKEN_INVALID_USER_IN_ISSUER

Beschreibung

Der im Aussteller angegebene Benutzername existiert nicht im Snowflake-Konto.

Lösung

Der im Snowflake-Client konfigurierte Benutzername muss mit dem Wert von LOGIN_NAME des Snowflake-Benutzers übereinstimmen, nicht mit seinem Wert für NAME. Manchmal sind diese Werte unterschiedlich.

Führen Sie den Befehl DESCRIBE USER aus, und überprüfen Sie, ob der Wert der Eigenschaft LOGIN_NAME mit dem Benutzernamen übereinstimmt, den der Snowflake-Client für die Verbindung verwendet.

JWT_TOKEN_INVALID_ISSUE_TIME

Beschreibung

Das JWT-Token wurde von Snowflake mehr als 60 Sekunden nach dem Ausstellungszeitpunkt empfangen.

Lösung 1

Überprüfen Sie den Host, auf dem der Treiber ausgeführt wird, um sicherzustellen, dass er mit NTP synchronisiert ist und keine Taktverzögerung aufweist. Wenn die Serveruhr ungenau ist, könnte Snowflake feststellen, dass die aktuelle Zeit mehr als 60 Sekunden nach dem Ausgabezeitpunkt des Tokens liegt, obwohl dies in Wirklichkeit nicht der Fall ist. Wenn der Clientcomputer beispielsweise 30 Sekunden im Rückstand ist und der Token 45 Sekunden benötigt, um Snowflake zu erreichen, dann stellt Snowflake fest, dass es 75 Sekunden her ist, seit der JWT-Token ausgegeben wurde, und nicht 45 Sekunden.

Sie können überprüfen, ob die Uhr des Clientcomputers genau geht, indem Sie sie mit einem NTP-Server vergleichen. Sie können zum Beispiel NIST Internet Time Servers verwenden, um den Clientcomputer zu synchronisieren. Weitere Informationen zum Überprüfen und Synchronisieren der Uhr Ihres Hosts mit einem NTP-Server finden Sie im Administratorhandbuch für Ihr Betriebssystem, oder wenden Sie sich an einen Systemadministrator.

Lösung 2

Verwenden Sie ein BS-spezifisches Überwachungstool, um festzustellen, ob der Fehler bei extremer CPU-/Festplattennutzung auftritt.

Lösung 3

Prüfen Sie, ob es eine übermäßige Netzwerklatenz gibt, die dazu führt, dass der JWT-Token mehr als 60 Sekunden nach dem Ausgabezeitpunkt des Tokens von Snowflake verarbeitet wird.

Wenn Sie ein Konnektivitätsdiagnose-Tool zur Messung der Netzwerklatenz verwenden, setzen Sie das Ziel auf account_identifier.snowflakecomputing.com. Wenn der Snowflake-Client zum Beispiel myorg-account1 als Kontobezeichner verwendet, setzen Sie das Ziel auf myorg-account1.snowflakecomputing.com.