자바스크립트를 활용한 GraphQL Subscriptions를 위한 인증과 권한 부여 방법

GraphQL Subscriptions는 실시간으로 데이터를 전송하고 수신하는 기능을 제공하는데, 이를 사용할 때 안전한 인증과 권한 부여가 필요합니다. 이번 기술 블로그 포스트에서는 자바스크립트를 활용하여 GraphQL Subscriptions를 구현하면서 인증과 권한 부여를 어떻게 처리할 수 있는지 살펴보겠습니다.

1. JWT(JSON Web Tokens)를 사용한 인증

GraphQL Subscriptions를 사용하기 위해서는 클라이언트가 인증되어야 합니다. 대부분의 경우, JWT(JSON Web Tokens)를 사용하여 인증을 처리합니다.

JWT는 클라이언트에게 부여된 토큰을 사용하여 요청을 인증하고, 사용자의 신원을 확인하는 방법입니다. 서버는 클라이언트가 제공한 토큰을 검증하여 해당 사용자에게 필요한 정보를 가져올 수 있습니다.

// 로그인 시 JWT 토큰 생성 예시
const jwt = require('jsonwebtoken');

const user = {
  id: 'user123',
  username: 'john_doe',
  role: 'admin'
};

const token = jwt.sign(user, 'secret_key', { expiresIn: '1h' });
console.log(token);

클라이언트는 해당 토큰을 인증 헤더에 포함하여 GraphQL Subscriptions에 요청을 보냅니다.

2. GraphQL 스키마를 활용한 권한 부여

GraphQL 스키마를 사용하여 GraphQL Subscriptions에 접근할 때 필요한 권한을 정의할 수 있습니다. 스키마에는 사용자의 권한에 대한 정보가 포함되어 있어 서버에서 해당 정보를 검사하고 인증된 사용자에게만 접근 권한을 부여할 수 있습니다.

// Graphql 스키마에 권한 정의 예시
type Subscription {
  newPost: Post
    @requiresAuth(role: "admin")
}

// 권한 검사 용 미들웨어
function requiresAuth(role) {
  return function(next, source, args, context) {
    const user = context.user;
    
    if (!user) {
      throw new Error('인증되지 않은 사용자입니다.');
    }

    if (user.role !== role) {
      throw new Error('권한이 없습니다.');
    }

    return next();
  }
}

위의 예시에서는 Subscription 타입의 newPost 필드에 @requiresAuth(role: "admin") 어노테이션을 추가하여 해당 사용자가 관리자 권한을 가지고 있을 경우만 구독할 수 있도록 설정한 것을 볼 수 있습니다.

마치며

이번 포스트에서는 자바스크립트를 사용하여 GraphQL Subscriptions를 구현하면서 인증과 권한 부여를 처리하는 방법을 알아보았습니다. JWT를 사용하여 인증을 처리하고, GraphQL 스키마를 활용하여 권한을 부여하는 방법을 사용하면 안전하게 GraphQL Subscriptions를 구현할 수 있습니다.

#GraphQL #Javascript