[typescript] 타입스크립트와 GraphQL을 함께 사용하는 API 인증과 권한 설정 방법

본 문서에서는 타입스크립트와 GraphQL을 함께 사용하는 API에서 인증과 권한 설정을 다루고자 합니다. API 보안은 매우 중요하며, 타입스크립트와 GraphQL을 사용한 프로젝트에서 이를 적절히 설정하는 방법에 대해 살펴보겠습니다.

목차

  1. 인증 설정
  2. 권한 설정
  3. 예제 코드

인증 설정

API의 인증은 사용자가 시스템에 로그인하고 자신의 권한을 증명하는 프로세스를 의미합니다. 타입스크립트와 GraphQL을 사용하는 API에서는 토큰 기반의 JWT(JSON Web Token) 인증 방식을 많이 사용합니다. 클라이언트가 로그인할 때 서버가 JWT 토큰을 발급하고, 이후 모든 요청에 해당 토큰을 포함하여 보내 인증합니다.

먼저, 타입스크립트를 사용하여 JWT 토큰을 발급, 검증 및 관리하는 방법을 구현해야 합니다. 이를 위해 jsonwebtoken 모듈을 사용하여 토큰을 생성하고 검증하는 함수를 구현할 수 있습니다.

import * as jwt from 'jsonwebtoken';

const generateToken = (payload: object, secret: string, expiresIn: string): string => {
  return jwt.sign(payload, secret, { expiresIn });
};

const verifyToken = (token: string, secret: string): object => {
  return jwt.verify(token, secret);
};

권한 설정

API의 권한 설정은 특정 리소스나 기능에 대한 접근 권한을 관리하는 것을 의미합니다. GraphQL을 사용한다면 graphql-shield와 같은 라이브러리를 사용하여 리졸버 함수에 대한 권한을 설정할 수 있습니다. 이를 통해 각각의 API 엔드포인트에 대한 접근 권한을 세밀하게 관리할 수 있습니다.

예를 들어, 특정 쿼리나 뮤테이션에 대해 특정 조건을 충족해야만 접근할 수 있도록 권한을 설정할 수 있습니다.

예제 코드

아래는 간단한 타입스크립트와 GraphQL API에서의 JWT 토큰 발급 및 권한 설정 예제입니다.

// 인증
const token = generateToken({ userId: '123456' }, 'jwt_secret', '1h');
// 권한
const permissions = {
  Query: {
    getUser: (parent, args, context) => {
      if (context.userId === args.id) {
        return true;
      }
      return false;
    },
  },
};

위 예제에서는 generateToken 함수를 사용하여 JWT 토큰을 발급하고, permissions 객체를 사용하여 getUser 쿼리에 대한 권한을 설정하였습니다.

마무리

위에서 언급한 방법들을 통해 타입스크립트와 GraphQL을 함께 사용하는 API에서 인증과 권한 설정을 구현할 수 있습니다. 이러한 관리는 보안 측면에서 매우 중요하므로, 신중하고 확실한 설정이 필요합니다. 위의 예제 코드를 참고하여 나만의 보안 체계를 구축해보시기 바랍니다.

참고 자료