애플리케이션 디자인

GraphQL, Go 및 Couchbase에서 권한 부여를 위해 JWT 사용

지난 몇 달 동안 저는 Go 프로그래밍 언어를 사용하여 GraphQL 시리즈를 작성해 왔습니다. 먼저 다음과 같은 방법을 살펴봤습니다. GraphQL 및 Go 시작하기를 클릭한 다음 리졸버를 사용하여 데이터 관계 처리 를 GraphQL 객체에 포함할 수 있습니다. 한 단계 더 나아가서 다음을 포함하는 방법을 살펴보았습니다. 권한 부여를 위한 JSON 웹 토큰(JWT) 를 GraphQL 객체에서 사용할 수 있지만 데이터베이스는 없습니다.

이 GraphQL과 Golang 여정의 논리적 다음 단계는 다음을 연결하는 것입니다. 카우치베이스 를 JSON 웹 토큰(JWT)을 통한 인증이 포함된 완전한 기능의 GraphQL 기반 API로 전환합니다. 다음을 통해 계정 생성, JWT 유효성 검사 및 라이브 데이터 작업을 처리하는 방법을 살펴보겠습니다. GraphQL 쿼리.

디자인 및 개발을 시작하기 전에 이 주제에 대한 이전 튜토리얼을 보지 않았다면 꼭 봐야 할 것입니다. 다음과 같은 사용법을 이해할 때까지는 JWT 측면에 대해 알아보지 않는 것이 좋습니다. GraphQL Golang으로.

JWT 애플리케이션을 사용하여 GraphQL에 Couchbase 포함하기

GraphQL 기반 애플리케이션을 만드는 과정을 반복하는 대신 시리즈에서 중단한 부분부터 다시 시작하겠습니다. 먼저 이전 JWT 튜토리얼 시리즈에서 다음과 같은 코드가 남았습니다:

이제 우리의 목표는 모든 모의 데이터를 Couchbase에 존재하는 실제 데이터로 교체하는 것입니다. 이 튜토리얼에서는 블로그 데이터 생성에 대해서는 다루지 않겠지만, 변이에 대해 배우고 싶으시면 이전 튜토리얼 중 하나를 확인하시기 바랍니다.

동적 데이터를 사용하기 위한 첫 번째 단계는 데이터베이스인 Couchbase를 설정하는 것입니다. 각 GraphQL 객체에서 사용할 다음 전역 변수를 만듭니다:

글로벌 버킷 참조가 생성되었으므로 이제 Couchbase 클러스터에 연결을 설정하고 버킷을 열어 보겠습니다. 이 작업은 프로젝트의 메인 함수입니다:

위의 코드는 로컬에서 실행 중인 클러스터와 RBAC, 그리고 이미 생성 및 정의된 버킷 정보가 있다고 가정합니다. 이 애플리케이션에 대한 Couchbase 인스턴스를 제대로 구성하지 않은 경우 잠시 시간을 내어 구성하세요.

더 이상 모의 데이터를 사용하지 않고 NoSQL 데이터베이스로 작업하기 때문에 기본 Go 구조를 약간 변경해야 합니다:

추가하여 유형 속성을 사용하면 데이터를 차별화할 수 있으므로 더 나은 쿼리를 작성할 수 있습니다. Go 데이터 구조를 변경한다고 해서 GraphQL 객체를 업데이트해야 하는 것은 아닙니다. 우리가 반환할 것으로 예상하는 것과 작업할 것으로 예상하는 것은 다를 수 있습니다.

이전 예제에서는 전달된 정보로 JSON 웹 토큰을 생성했습니다. 실제로는 실제 계정 정보로 JWT를 생성하고 싶습니다. 이를 가능하게 하려면 계정 생성을 위한 엔드포인트를 만들어야 합니다:

위의 함수는 사용자 아이디와 비밀번호를 받아 bcrypt로 비밀번호를 해시한 후 데이터베이스에 삽입합니다. 이 계정에 대해 데이터베이스를 쿼리하고 인증 수단으로 해시를 비밀번호와 비교할 것입니다. 이렇게 하려면 토큰 엔드포인트 생성 함수입니다:

전달된 사용자 아이디와 비밀번호를 가져와서 JWT를 만드는 대신 데이터베이스 쿼리를 수행한다는 점에 유의하세요. 정보가 전달된 정보와 일치하지 않으면 오류를 반환하고, 그렇지 않으면 사용자 아이디를 기반으로 JWT를 계속 생성합니다.

계정을 생성하고 이로부터 JSON 웹 토큰을 생성하는 확실한 방법이 있다고 가정하면, 모의 데이터가 아닌 Couchbase를 사용하도록 GraphQL 객체를 변경할 수 있습니다.

내부 메인 함수에는 rootQuery 객체를 가진 블로그 쿼리뿐만 아니라 계정 쿼리. 우리는 블로그 쿼리를 먼저 입력하면 다음과 같이 표시됩니다:

블로그 데이터의 모의 목록을 반환하는 대신 N1QL 쿼리를 수행하여 결과를 반환합니다. Go 데이터 구조는 GraphQL 객체에 매핑됩니다.

N1QL 쿼리를 통해 블로그 데이터를 반환하더라도 페이지 조회수 속성은 여전히 객체에 정의된 대로 JWT로 보호됩니다.

마지막 쿼리는 다음과 같습니다:

디코딩된 토큰 정보를 검색하여 N1QL 쿼리에서 매개변수로 사용하고 있음을 알 수 있습니다. 이렇게 하면 토큰 데이터 또는 현재 로그인한 사용자를 기반으로 특정 계정을 쿼리할 수 있습니다.

데이터베이스에 몇 가지 데이터를 생성하고 어떤 일이 발생하는지 확인해 보세요.

결론

Go가 포함된 GraphQL 시리즈를 다음과 같이 구성하여 마무리했습니다. 카우치베이스 를 추가했습니다. 실제로 Couchbase를 추가해도 JWT 예제에는 아무런 변화가 없었으며 단지 사용할 데이터 소스만 제공되었을 뿐입니다. 이 시리즈의 이전 튜토리얼을 자세히 살펴보면 데이터뿐만 아니라 쿼리, 변경 및 보호가 포함된 GraphQL에 대해 자세히 알아볼 수 있습니다. 프로덕션 지원 API에서 기대할 수 있는 모든 기능을 기존의 REST API 접근 방식이 아닌 GraphQL을 통해 제공합니다.

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 Nic Raboy, 개발자 옹호자, Couchbase

닉 라보이는 최신 웹 및 모바일 개발 기술을 옹호하는 사람입니다. 그는 Java, JavaScript, Golang 및 Angular, NativeScript, Apache Cordova와 같은 다양한 프레임워크에 대한 경험이 있습니다. Nic은 웹 및 모바일 개발을 보다 쉽게 이해할 수 있도록 자신의 개발 경험에 대해 글을 쓰고 있습니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.