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:
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).
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');
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 deriss
-Forderung übereinstimmen.- Lösung 4:
Überprüfen besonders sorgfältig, ob der
iss
-AnspruchSHA256
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ürNAME
. 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 Beispielmyorg-account1
als Kontobezeichner verwendet, setzen Sie das Ziel aufmyorg-account1.snowflakecomputing.com
.