Autenticação no servidor¶
Este tópico descreve como fazer a autenticação no servidor ao usar a API de SQL do Snowflake.
Quando você envia uma solicitação, a solicitação deve incluir informações de autenticação. As próximas seções explicam como adicionar essas informações à solicitação:
Uso de OAuth¶
Para usar o OAuth, siga estes passos:
Configure o OAuth para a autenticação.
Consulte Introdução ao OAuth para obter detalhes sobre como configurar o OAuth e obter um token OAuth.
Use o Snowflake CLI para verificar se você pode usar um token OAuth gerado para se conectar ao Snowflake:
Para sistemas Linux e MacOS
Para sistemas Windows
Em cada solicitação de API que você enviar, defina os seguintes cabeçalhos:
Authorization: Bearer oauth_tokenonde
oauth_tokené o token OAuth gerado.(Opcional)
X-Snowflake-Authorization-Token-Type: OAUTHSe você omitir o cabeçalho
X-Snowflake-Authorization-Token-Type, o Snowflake determinará o tipo de token examinando o token.Embora esse cabeçalho seja opcional, você pode optar por especificá-lo. Você pode definir o cabeçalho com um dos seguintes valores:
KEYPAIR_JWT(para autenticação de pares de chaves)OAUTH(para OAuth)PROGRAMMATIC_ACCESS_TOKEN(para tokens de acesso programático)
Uso de autenticação de pares de chaves¶
Para usar a autenticação por par de chaves, siga esses passos:
Configure a autenticação por par de chaves.
Como parte desse processo, você deve:
Gerar um par de chaves público-privado. A chave privada gerada deve estar em um arquivo (por exemplo, chamado
rsa_key.p8).Atribua a chave pública a seu usuário do Snowflake. Depois de atribuir a chave ao usuário, execute o comando DESCRIBE USER. Na saída, a propriedade
RSA_PUBLIC_KEY_FPdeve ser definida como a impressão digital da chave pública atribuída ao usuário.
Para obter instruções sobre como gerar o par de chaves e atribuir uma chave a um usuário, consulte Autenticação de pares de chaves e rotação de pares de chaves. Para exemplos específicos de como criar uma impressão digital e gerar um token JWT, veja o seguinte:
Use o Snowflake CLI para verificar se você pode usar a chave privada gerada para conectar ao Snowflake:
O comando solicita uma senha de chave privada para concluir a conexão. É possível evitar o prompt fornecendo a frase secreta na variável de ambiente
PRIVATE_KEY_PASSPHRASE.Em seu código do aplicativo:
Gere a impressão digital (um hash SHA-256) da chave pública para o usuário. Prefixe a impressão digital com
SHA256:. Por exemplo:SHA256:hashVocê também pode executar o comando SQL DESCRIBE USER para obter o valor da propriedade RSA_PUBLIC_KEY_FP.
Gere um web token JSON (JWT) com os seguintes campos na carga útil:
Campo
Descrição
Exemplo
issEmissor do JWT. Defina-o com o seguinte valor:
account_identifier.user.SHA256:public_key_fingerprintonde:
account_identifieré seu identificador da conta Snowflake.Se você estiver usando o localizador de contas, exclua qualquer informação de região do localizador de contas.
useré seu nome de usuário Snowflake.SHA256:public_key_fingerprinté a impressão digital que você gerou na etapa anterior.
Nota
Os valores
account_identifiereuserdevem usar todos os caracteres maiúsculos. Se seu ID da conta contiver pontos (.), você deverá substituí-los por hífens (-), pois os pontos em um identificador de conta fazem com que JWT seja inválido.MYORGANIZATION-MYACCOUNT.MYUSER.SHA256:public_key_fingerprintsubAssunto do JWT. Defina-o com o seguinte valor:
account_identifier.userMYORGANIZATION-MYACCOUNT.MYUSERiatTempo de emissão do JWT em UTC. Defina o valor como o valor de tempo atual como segundos ou milissegundos.
1615370644(segundos) .1615370644000(milissegundos)expTempo de expiração do JWT em UTC. Você pode especificar o valor como segundos ou milissegundos.
Nota
Nota: o JWT é válido por, no máximo, uma hora após a emissão do token, mesmo se você especificar um tempo de vencimento mais longo.
1615374184(segundos) .1615374184000(milissegundos)Em cada solicitação de API que você enviar, defina os seguintes cabeçalhos:
Authorization: Bearer JWTonde
JWTé o token que você gerou.(Opcional)
X-Snowflake-Authorization-Token-Type: KEYPAIR_JWTSe você omitir o cabeçalho
X-Snowflake-Authorization-Token-Type, o Snowflake determinará o tipo de token examinando o token.Embora esse cabeçalho seja opcional, você pode optar por especificá-lo. Você pode definir o cabeçalho com um dos seguintes valores:
KEYPAIR_JWT(para autenticação de pares de chaves)OAUTH(para OAuth)PROGRAMMATIC_ACCESS_TOKEN(para tokens de acesso programático)
Exemplo em Python¶
As seções a seguir descrevem como gerar um JWT e uma impressão digital usando Python.
Para um exemplo de geração de um JWT em Python, veja sql-api-generate-jwt.py. O exemplo sql-api-generate-jwt.py usa o módulo PyJWT, que você pode instalar executando:
Como gerar um JWT em Python¶
As seções de código a seguir demonstram como gerar um JWT. Para obter um exemplo completo, consulte sql-api-generate-jwt.py.
Nota
Este exemplo se destina a ser utilizado apenas como referência. Não utilize esse código em aplicativos ou ambientes de produção.
Como gerar uma impressão digital em Python¶
As seções de código a seguir demonstram como gerar a impressão digital. Para obter um exemplo completo, consulte sql-api-generate-jwt.py.
Exemplo de Snowflake CLI¶
Você pode usar o comando Snowflake CLI snow connection generate-jwt para gerar um JWT para autenticação de pares de chaves. Para obter mais informações, consulte snow connection generate-jwt.
Este exemplo gera um token para a conta TEST e usuário JDOE, usando a chave privada de rsa_key.p8:
O comando solicita uma senha de chave privada para concluir a conexão. É possível evitar o prompt fornecendo a frase secreta na variável de ambiente PRIVATE_KEY_PASSPHRASE.
Exemplo em Java¶
Para obter um exemplo de geração de um JWT em Java, consulte SimpleStatementsApi.java.
Nota
Este exemplo se destina a ser utilizado apenas como referência. Não utilize esse código em aplicativos ou ambientes de produção.
Esse exemplo usa as seguintes bibliotecas de terceiros:
Swagger Codegen: uma biblioteca de código aberto útil no desenvolvimento de REST APIs e aplicativos.
Auth0: fornece APIs de Java para autenticação e geração de tokens JWT.
Exemplo em Node.js¶
Para um exemplo de geração de um JWT em Node.js, veja sql-api-generate-jwt.js.
Nota
Este exemplo se destina a ser utilizado apenas como referência. Não utilize esse código em aplicativos ou ambientes de produção.