[typescript] 타입스크립트와 GraphQL에서 인증과 권한 부여 처리하기

소개

웹 애플리케이션에서 보안은 핵심적인 요소입니다. 사용자의 권한 및 인증을 처리하는 것은 매우 중요한 작업입니다. 이번 블로그에서는 타입스크립트와 GraphQL을 사용하여 인증과 권한 부여를 처리하는 방법에 대해 알아보겠습니다.

인증과 권한 부여

인증(Authentication)은 사용자가 누구인지 확인하는 것이며, 권한 부여(Authorization)는 특정 리소스 또는 기능을 사용할 수 있는 권한을 부여하는 것입니다.

타입스크립트를 사용한 GraphQL 서버 구축

import { ApolloServer, gql } from 'apollo-server';
import { verifyToken } from './auth';

const typeDefs = gql`
  type Query {
    me: User
  }
  type User {
    id: ID
    username: String
  }
`;

const resolvers = {
  Query: {
    me: (parent, args, context) => {
      if (!context.user) {
        throw new Error('인증이 필요합니다.');
      }
      return context.user;
    },
  },
};

const server = new ApolloServer({
  typeDefs,
  resolvers,
  context: ({ req }) => {
    const token = req.headers.authorization || '';
    const user = verifyToken(token);
    return { user };
  },
});

server.listen().then(({ url }) => {
  console.log(`서버가 시작되었습니다: ${url}`);
});

JWT(JSON Web Token)를 사용한 인증

JWT는 인증을 위한 웹 표준이며, 데이터가 JSON 객체로 안전하게 전송될 수 있도록 해줍니다. 타입스크립트를 사용하여 JWT를 생성하고 검증할 수 있습니다.

import jwt from 'jsonwebtoken';

const secretKey = 'verysecretkey';

function createToken(user) {
  return jwt.sign({ userId: user.id, username: user.username }, secretKey);
}

function verifyToken(token) {
  try {
    const user = jwt.verify(token, secretKey);
    return user;
  } catch (error) {
    return null;
  }
}

export { createToken, verifyToken };

결론

타입스크립트와 GraphQL을 활용하여 JWT를 사용한 인증 및 권한 부여를 구현하는 방법에 대해 알아봤습니다. 보안 요소는 더 많은 고려와 검토가 필요하지만, 이러한 기본 원칙을 토대로 안전한 웹 애플리케이션을 구축할 수 있습니다.

참고 자료