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:

  1. Configuração de autenticação de par de chaves

  2. Como gerar um token JWT

Configuração de autenticação de par de chaves

Para usar a autenticação por par de chaves, siga esses passos:

  1. Configuração de autenticação de par de chaves.

    Como parte desse processo, você deve:

    1. Gerar um par de chaves público-privado. A chave privada gerada deve estar em um arquivo (por exemplo, chamado rsa_key.p8).

    2. 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.

  2. 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
    
    Copy

    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:

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

  2. 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 e user 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)

  3. Em cada solicitação de API que você enviar, defina os seguintes cabeçalhos:

    • Authorization: Bearer JWT

      onde JWT é o token que você gerou.

    • X-Snowflake-Authorization-Token-Type: KEYPAIR_JWT

Uso de OAuth

Para usar o OAuth, siga estes passos:

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

  2. 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>
    
    Copy
    • Para sistemas Windows

    $ snowsql -a <account_identifier> -u <user> --authenticator=oauth --token="<oauth_token>"
    
    Copy
  3. 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.

    • X-Snowflake-Authorization-Token-Type: OAUTH