Design de aplicativos

Uso de JWT para autorização com GraphQL, Go e Couchbase

Nos últimos meses, escrevi uma série sobre GraphQL usando a linguagem de programação Go. Primeiro, vimos como Comece a usar GraphQL e Goseguido de uma maneira alternativa de lidar com relacionamentos de dados usando resolvedores em objetos GraphQL. Dando um passo adiante, vimos como incluir Tokens da Web JSON (JWT) para autorização em objetos GraphQL, mas sem um banco de dados.

A próxima etapa lógica nessa jornada do GraphQL com Golang seria conectar o Couchbase para uma API com tecnologia GraphQL totalmente funcional que inclui autorização com tokens da Web JSON (JWT). Veremos como lidar com a criação de contas, a validação de JWT e o trabalho com dados em tempo real por meio de Consultas GraphQL.

Antes de mergulhar no design e no desenvolvimento, se você ainda não viu meus tutoriais anteriores sobre o assunto, provavelmente deveria ver. Eu não recomendaria entrar na parte do JWT até que você tenha um conhecimento sobre o uso de GraphQL com a Golang.

Inclusão do Couchbase em um aplicativo GraphQL com JWT

Em vez de reiterar o processo de criação de um aplicativo alimentado por GraphQL, vamos começar de onde paramos na série. O tutorial anterior sobre JWT na série nos deixou com o seguinte código:

Nosso objetivo agora é trocar todos esses dados simulados por dados reais que existem no Couchbase. Não nos preocuparemos com a criação de dados de blog neste tutorial, mas se você quiser aprender sobre mutações, consulte um dos tutoriais anteriores.

A primeira etapa óbvia para usar dados dinâmicos é configurar nosso banco de dados, o Couchbase. Crie a seguinte variável global para ser usada em cada um de nossos objetos GraphQL:

Com a referência global do Bucket criada, vamos estabelecer uma conexão com nosso cluster do Couchbase e abrir um bucket. Isso pode ser feito na seção principal função:

O código acima pressupõe um cluster em execução localmente e RBAC, bem como informações de Bucket já criadas e definidas. Se você não tiver configurado adequadamente sua instância do Couchbase para esse aplicativo, reserve um momento para fazer isso.

Como estamos trabalhando com um banco de dados NoSQL e não mais com dados simulados, nossas estruturas nativas em Go precisam ser ligeiramente alteradas:

Ao adicionar um Tipo podemos escrever consultas melhores porque podemos diferenciar nossos dados. Alterar as estruturas de dados Go não significa que precisamos atualizar nossos objetos GraphQL. O que esperamos retornar em comparação com o que esperamos trabalhar pode ser diferente.

No exemplo anterior, estávamos gerando nosso token da Web JSON com informações passadas. Na realidade, queremos gerar nosso JWT com informações reais da conta. Para que isso seja possível, precisamos criar um ponto de extremidade para a criação de contas:

A função acima receberá um nome de usuário e uma senha, fará o hash da senha com bcrypt e a inserirá no banco de dados. Consultaremos o banco de dados para essa conta e compararemos o hash com uma senha como meio de autenticação. Para fazer isso, provavelmente devemos atualizar nosso CreateTokenEndpoint função:

Observe que, em vez de pegar o nome de usuário e a senha passados e criar um JWT a partir deles, estamos fazendo uma consulta ao banco de dados. Se as informações não corresponderem ao que foi passado, retornaremos um erro; caso contrário, continuaremos a criar um JWT com base em nosso nome de usuário.

Supondo que tenhamos uma maneira sólida de criar contas e gerar tokens da Web JSON a partir delas, podemos começar a alterar nossos objetos GraphQL para usar o Couchbase em vez de dados simulados.

Dentro do principal temos uma função rootQuery com um objeto blogs bem como uma consulta conta consulta. Definiremos nossa blogs primeiro, e seria algo parecido com isto:

Em vez de retornar uma lista simulada de dados do blog, estamos fazendo uma consulta N1QL e retornando os resultados. A estrutura de dados Go é mapeada para o nosso objeto GraphQL.

Embora estejamos retornando dados de blog por meio de nossa consulta N1QL, o visualizações de página ainda está protegida com o JWT, conforme definido no objeto.

A consulta final que temos é mais ou menos assim:

Observe que estamos recuperando as informações do token decodificado e usando-as como parâmetro em nossa consulta N1QL. É assim que podemos consultar uma determinada conta com base nos dados do token ou no usuário conectado no momento.

Tente criar alguns dados no banco de dados e veja o que acontece.

Conclusão

Encerramos nossa série sobre GraphQL com Go configurando Couchbase em nosso exemplo de autorização JWT. Na realidade, adicionar o Couchbase não alterou nada do nosso exemplo de JWT, apenas nos deu uma fonte de dados a ser usada. Se você pesquisar os tutoriais anteriores desta série, conhecerá a fundo o GraphQL, que inclui consultas, mutações e proteção de consultas, além de partes de dados. Tudo o que você esperaria de uma API pronta para produção, mas com GraphQL em vez de uma abordagem tradicional de API REST.

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Nic Raboy, defensor dos desenvolvedores, Couchbase

Nic Raboy é um defensor das modernas tecnologias de desenvolvimento móvel e da Web. Ele tem experiência em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experiências de desenvolvimento relacionadas a tornar o desenvolvimento móvel e da Web mais fácil de entender.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.