Autenticação de par de chaves: solução de problemas¶
Este tópico ajuda a solucionar erros que ocorrem ao se conectar ao Snowflake com autenticação de par de chaves. Ele se concentra nos erros que contêm JWT token is invalid
.
Como encontrar o erro¶
Antes da solução de problemas, você precisa determinar se o problema está resultando em um erro JWT token is invalid
.
Se o seu cliente Snowflake for um driver ou conector que não possui uma interface interativa, use logs para inspecionar erros de conexão:
Habilite o registro em log para o conector ou driver Snowflake. Para obter detalhes, consulte Geração de arquivos de log para drivers Snowflake e conectores (artigo do Snowflake Knowledge Base).
Verifique se há erros que contenham a sequência
JWT token is invalid
.Por exemplo, um cliente que usa o driver Snowflake JDBC pode receber o seguinte erro ao tentar usar a autenticação de par de chaves:
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:
Recuperação de detalhes adicionais¶
Cada erro JWT token is invalid
inclui um UUID que aparece entre colchetes imediatamente após o erro (por exemplo, JWT token is invalid. [0ce9eb56-821d-4ca9-a774-04ae89a0cf5a]
). Você deve fornecer o UUID do erro a um administrador do Snowflake para que ele possa obter mais informações sobre o erro.
Os administradores usam a função SYSTEM$GET_LOGIN_FAILURE_DETAILS para obter detalhes adicionais sobre o erro. Por exemplo, para obter informações adicionais sobre o erro JWT token is invalid. [0ce9eb56-821d-4ca9-a774-04ae89a0cf5a]
, um usuário com a função ACCOUNTADIMN pode executar:
SELECT JSON_EXTRACT_PATH_TEXT(SYSTEM$GET_LOGIN_FAILURE_DETAILS('0ce9eb56-821d-4ca9-a774-04ae89a0cf5a'), 'errorCode');
A função JSON_EXTRACT_PATH_TEXT analisa a saída JSON da função SYSTEM$GET_LOGIN_FAILURE_DETAILS para recuperar o código de erro e o erro.
Lista de erros¶
A saída da função SYSTEM$GET_LOGIN_FAILURE_DETAILS é uma das seguintes combinações de código de erro/erro.
Código de erro |
Erro |
Descrição |
---|---|---|
390144 |
JWT_TOKEN_INVALID |
Há um problema geral com o token JWT. Para possíveis soluções, consulte Erros e soluções comuns. |
394300 |
JWT_TOKEN_INVALID_USER_IN_ISSUER |
O nome de usuário especificado no emissor não existe na conta Snowflake. Para possíveis soluções, consulte Erros e soluções comuns. |
394301 |
JWT_TOKEN_MISSING_ISSUE_OR_EXPIRATION_TIME |
O token JWT não contém uma hora de emissão ou de expiração. |
394302 |
JWT_TOKEN_INVALID_ISSUE_TIME |
O token JWT foi recebido pelo Snowflake mais de 60 segundos após a hora de emissão. Para possíveis soluções, consulte Erros e soluções comuns. |
394303 |
JWT_TOKEN_INVALID_EXPIRATION_TIME |
O token JWT expirou. |
394304 |
JWT_TOKEN_INVALID_PUBLIC_KEY_FINGERPRINT_MISMATCH |
Há uma incompatibilidade entre a impressão digital da chave pública especificada no emissor e aquela armazenada para o usuário no Snowflake. Para possíveis soluções, consulte Erros e soluções comuns. |
394305 |
JWT_TOKEN_INVALID_ALGORITHM |
O token JWT não foi assinado com o algoritmo RS256. |
394306 |
JWT_TOKEN_INVALID_SIGNATURE |
Snowflake não conseguiu verificar a assinatura fornecida pelo token JWT. É possível que JWT tenha sido assinado com uma chave privada que não está emparelhada com a chave pública fornecida. Também é possível que a assinatura JWT esteja corrompida ou tenha sido modificada. |
Erros e soluções comuns¶
Os erros mais comuns associados à autenticação de par de chaves são:
Use as descrições e soluções a seguir para solucionar esses erros.
JWT_TOKEN_INVALID¶
- Descrição:
Há um problema geral com o token JWT.
- Solução nº 1:
O próprio token pode estar malformado. Verifique novamente se o aplicativo que acessa o Snowflake está gerando tokens JWT válidos.
- Solução nº 2:
Verifique novamente se o cliente (URL da solicitação, driver ou conector) está usando o identificador de conta correto para se conectar à conta Snowflake. Você também deve verificar se esse valor corresponde ao identificador da conta na declaração
iss
.- Solução n.º 3:
Verifique novamente se o identificador da conta e o nome de usuário na declaração
sub
correspondem aos valores correspondentes na declaraçãoiss
.- Solução n.º 4:
Verifique novamente se a declaração
iss
especificaSHA256
como o algoritmo de assinatura.
JWT_TOKEN_INVALID_PUBLIC_KEY_FINGERPRINT_MISMATCH¶
- Descrição:
Há uma incompatibilidade entre a impressão digital da chave pública especificada no emissor e aquela armazenada para o usuário no Snowflake.
- Solução:
Obtenha a impressão digital da chave pública do token JWT e compare-a com a impressão digital associada ao usuário no Snowflake.
Um método para obter a impressão digital do token JWT é ativar o registro DEBUG para seu driver e tentar fazer login. Procure o padrão
SHA256:<hash>
, onde<hash>
é a impressão digital da chave pública.Para obter a impressão digital da chave pública associada ao usuário no Snowflake, execute o comando DESCRIBE USER. A impressão digital da chave pública está localizada na propriedade RSA_PUBLIC_KEY_FP ou RSA_PUBLIC_KEY_2_FP. Se o usuário não tiver uma impressão digital de chave pública, execute o comando ALTER USER para definir essas propriedades.
JWT_TOKEN_INVALID_USER_IN_ISSUER¶
- Descrição:
O nome de usuário especificado no emissor não existe na conta Snowflake.
- Solução:
O nome de usuário configurado no cliente Snowflake deve corresponder ao
LOGIN_NAME
do usuário Snowflake, não ao seuNAME
. Às vezes, esses valores são diferentes.Execute o comando DESCRIBE USER e verifique se o valor da propriedade
LOGIN_NAME
corresponde ao nome de usuário que o cliente Snowflake está usando para se conectar.
JWT_TOKEN_INVALID_ISSUE_TIME¶
- Descrição:
O token JWT foi recebido pelo Snowflake mais de 60 segundos após a hora de emissão.
- Solução nº 1:
Verifique o host onde o driver está sendo executado para garantir que ele esteja sincronizado com NTP e não tenha distorção de relógio. Se o relógio do servidor estiver distorcido, o Snowflake poderá determinar que a hora atual é superior a 60 segundos após o horário de emissão do token, quando na verdade não é. Por exemplo, se a máquina cliente estiver 30 segundos atrasada e o token tiver levado 45 segundos para chegar ao Snowflake, o Snowflake determinará que se passaram 75 segundos desde que o token JWT foi emitido, e não 45 segundos.
Você pode verificar se o relógio da máquina cliente está correto comparando-o com um servidor NTP. Por exemplo, você pode usar Servidores de horário da internet NIST para sincronizar a máquina cliente. Para obter ajuda sobre como verificar e sincronizar o relógio do seu host com um servidor NTP, consulte o guia do administrador do seu sistema operacional ou entre em contato com um administrador do sistema.
- Solução nº 2:
Use uma ferramenta de monitoramento específica do OS para determinar se o erro ocorre durante períodos de uso extremo de CPU/disco.
- Solução n.º 3:
Verifique se há latência de rede excessiva que esteja fazendo com que o token JWT seja processado pelo Snowflake mais de 60 segundos após o horário de emissão do token.
Ao usar uma ferramenta de diagnóstico de conectividade para medir a latência da rede, defina o destino como
account_identifier.snowflakecomputing.com
. Por exemplo, se o cliente Snowflake estiver usandomyorg-account1
como identificador de conta, defina o destino comomyorg-account1.snowflakecomputing.com
.