Поиск по сайту
Ctrl + K
Вопросы по Nest.js

Как токены используются для авторизации в API?

Когда речь заходит о веб-разработке и API, важно понимать два ключевых понятия: аутентификация и авторизация. Эти процессы часто путают, но это разные стадии работы с пользователем.

Аутентификация vs Авторизация

  • Аутентификация — это процесс проверки идентификационных данных пользователя. Проще говоря, это способ убедиться, что пользователь действительно тот, за кого себя выдает. Например, при вводе имени пользователя и пароля происходит аутентификация.
  • Авторизация — это процесс определения прав доступа пользователя после его аутентификации. То есть, даже если вы подтвердили личность пользователя, необходимо выяснить, какие действия и ресурсы ему доступны (например, может ли он редактировать запись или только просматривать).

Использование токенов для аутентификации и авторизации

Токены — это небольшие фрагменты данных, которые используются для подтверждения идентичности пользователя и предоставления ему доступа к определенным ресурсам.

  • Аутентификация с токенами:
    • После успешной аутентификации сервер генерирует токен (чаще всего JWT — JSON Web Token), который может быть отправлен клиенту. Токен включает в себя информацию о пользователе и срок действия.
    • Пример кода на NestJS для генерации токена:
    import { sign } from 'jsonwebtoken';
    
    const payload = { username: user.username, sub: user.id };
    const token = sign(payload, secretKey, { expiresIn: '1h' });
    
  • Авторизация с токенами:
    • Каждый раз, когда клиент хвастит данные с сервера, он должен отправить свой токен в заголовке запроса. Сервер проверяет токен, и если он действителен и не истек, пользователь получает доступ к запрашиваемому ресурсу.
    • Пример использование токена в заголовке:
    import axios from 'axios';
    
    const token = 'ваш_токен';
    const response = await axios.get('http://api.example.com/protected-resource', {
        headers: {
            Authorization: `Bearer ${token}`
        }
    });
    
  • Реализация в NestJS

    В NestJS можно использовать Guards для проверки токенов. Пример простого Guard-а:

    import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
    import { JwtService } from '@nestjs/jwt';
    
    @Injectable()
    export class JwtAuthGuard implements CanActivate {
      constructor(private readonly jwtService: JwtService) {}
    
      canActivate(context: ExecutionContext): boolean {
        const request = context.switchToHttp().getRequest();
        const token = request.headers['authorization']?.split(' ')[1];
    
        try {
          const payload = this.jwtService.verify(token);
          request.user = payload; // Сохраняем пользователя в запросе
          return true;
        } catch (error) {
          return false; // Неправильный токен
        }
      }
    }
    

    Это более подробное представление о том, как токены используются для аутентификации и авторизации в API. Это поможет вам лучше понять эти важные аспекты веб-разработки.