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:

  1. 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).

  2. 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');
Copy

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ção iss.

Solução n.º 4

Verifique novamente se a declaração iss especifica SHA256 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 seu NAME. À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 usando myorg-account1 como identificador de conta, defina o destino como myorg-account1.snowflakecomputing.com.