Autenticando o Snowflake REST APIs com Snowflake¶
Este tópico descreve como autenticar no servidor ao usar o Snowflake REST APIs.
Ao enviar uma solicitação, a solicitação deve incluir informações de autenticação usando um dos seguintes:
Como usar a autenticação por par de chaves¶
Ao usar a autenticação de par de chaves, você precisa concluir as seguintes tarefas:
Configuração de autenticação de par de chaves¶
Para usar a autenticação por par de chaves, siga esses passos:
Configuração de autenticação de 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_FP
deve 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.
Use o SnowSQL para verificar se você pode usar a chave privada gerada para conectar ao Snowflake:
$ snowsql -a <account_identifier> -u <user> --private-key-path <path>/rsa_key.p8
Se você tiver gerado uma chave privada criptografada, o SnowSQL solicitará a senha que você criou quando gerou a chave.
Como gerar um token JWT¶
Para gerar um token JWT no código do aplicativo, siga estas etapas:
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:hash
Você 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
iss
Emissor do JWT. Defina-o com o seguinte valor:
account_identifier.user.SHA256:public_key_fingerprint
onde:
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_identifier
euser
devem usar todos os caracteres maiúsculos.MYORGANIZATION-MYACCOUNT.MYUSER.SHA256:public_key_fingerprint
sub
Assunto do JWT. Defina-o com o seguinte valor:
account_identifier.user
MYORGANIZATION-MYACCOUNT.MYUSER
iat
Tempo de emissão do JWT em UTC. Defina o valor como o valor de tempo atual como segundos ou milissegundos.
1615370644
(segundos) .1615370644000
(milissegundos)exp
Tempo 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 JWT
onde
JWT
é o token que você gerou.(Opcional)
X-Snowflake-Authorization-Token-Type: KEYPAIR_JWT
Se 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 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 SnowSQL para verificar se você pode usar um token OAuth gerado para se conectar ao Snowflake:
Para sistemas Linux e MacOS
$ snowsql -a <account_identifier> -u <user> --authenticator=oauth --token=<oauth_token>
Para sistemas Windows
$ snowsql -a <account_identifier> -u <user> --authenticator=oauth --token="<oauth_token>"
Em cada solicitação de API que você enviar, defina os seguintes cabeçalhos:
Authorization: Bearer oauth_token
onde
oauth_token
é o token OAuth gerado.(Opcional)
X-Snowflake-Authorization-Token-Type: OAUTH
Se 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)
Usar um token de acesso programático (PAT)¶
Para autenticar com um token de acesso programático, defina os seguintes cabeçalhos HTTP na solicitação:
Authorization: Bearer token_secret
X-Snowflake-Authorization-Token-Type: PROGRAMMATIC_ACCESS_TOKEN
(opcional)
Por exemplo, se você estiver usando cURL para enviar uma solicitação a um ponto de extremidade da Snowflake REST API:
curl --location 'https://myorganization-myaccount.snowflakecomputing.com/api/v2/databases' \
--header "Authorization: Bearer <token_secret>"
Se a solicitação falhar com um erro PAT_INVALID
, o erro pode ter ocorrido por um dos seguintes motivos:
O usuário associado ao token de acesso programático não foi encontrado.
A validação falhou.
A função associada ao token de acesso programático não foi encontrada.
O usuário não está associado ao token de acesso programático especificado.
Para obter mais informações, consulte Uso de um token de acesso programático para autenticação em um ponto de extremidade.