¿Qué son los Alcances de OAuth 2.0 y Cómo Funcionan?

Ashley Innocent

Ashley Innocent

13 March 2026

¿Qué son los Alcances de OAuth 2.0 y Cómo Funcionan?

Apidog para empresas

Despliegue local

SSO & RBAC

Conforme con SOC 2

Explorar Apidog Enterprise

En resumen (TL;DR)

Los ámbitos (scopes) de OAuth 2.0 son cadenas de permisos que definen lo que un token de acceso puede hacer. Utilice el formato recurso:acción como pets:read o orders:write. Solicite los ámbitos durante la autorización, y valídelos en los puntos finales de la API. La Modern PetstoreAPI implementa ámbitos para el acceso de lectura/escritura a mascotas, pedidos y datos de usuario.

Introducción

Una aplicación de terceros quiere leer el inventario de su tienda de mascotas. ¿Debería tener acceso completo para crear pedidos, eliminar mascotas y gestionar usuarios? No. Solo debería leer el inventario.

Los ámbitos de OAuth 2.0 resuelven esto. Los ámbitos definen qué permisos tiene un token de acceso. La aplicación solicita el ámbito inventory:read. Su API valida que el token tenga este ámbito antes de devolver los datos.

Modern PetstoreAPI implementa ámbitos granulares para todos los recursos: mascotas, pedidos, inventario y usuarios.

Si está probando APIs de OAuth, Apidog le ayuda a probar la validación de ámbitos y los flujos de autorización.

botón

¿Qué son los ámbitos de OAuth 2.0?

Los ámbitos son cadenas de permisos incluidas en los tokens de acceso de OAuth.

Formato de ámbito

pets:read          - Leer datos de mascotas
pets:write         - Crear/actualizar mascotas
orders:read        - Leer pedidos
orders:write       - Crear pedidos
admin:all          - Acceso de administrador completo

Ámbito en el flujo de OAuth

1. Solicitud de autorización:

GET /oauth/authorize?
  client_id=app123&
  scope=pets:read orders:read&
  redirect_uri=https://app.com/callback

2. Consentimiento del usuario:

La aplicación "PetFinder" quiere:
- Leer tus mascotas
- Leer tus pedidos

[Permitir] [Denegar]

3. Token de acceso:

{
  "access_token": "eyJhbGc...",
  "scope": "pets:read orders:read",
  "expires_in": 3600
}

4. Solicitud a la API:

GET /v1/pets
Authorization: Bearer eyJhbGc...

200 OK (ámbito validado)

Cómo funcionan los ámbitos

El token contiene ámbitos

El token de acceso incluye los ámbitos concedidos:

// JWT decodificado
{
  "sub": "user-456",
  "scope": "pets:read orders:read",
  "exp": 1710331200
}

La API valida los ámbitos

app.get('/v1/pets', requireScope('pets:read'), async (req, res) => {
  const pets = await getPets();
  res.json(pets);
});

app.post('/v1/pets', requireScope('pets:write'), async (req, res) => {
  const pet = await createPet(req.body);
  res.status(201).json(pet);
});

function requireScope(requiredScope) {
  return (req, res, next) => {
    const token = extractToken(req);
    const decoded = verifyToken(token);

    if (!decoded.scope.includes(requiredScope)) {
      return res.status(403).json({
        error: 'insufficient_scope',
        message: `Requires scope: ${requiredScope}`
      });
    }

    next();
  };
}

Diseño de ámbitos

Convenciones de nomenclatura de ámbitos

Patrón Recurso:Acción:

pets:read
pets:write
orders:read
orders:write
users:read
users:write

Ámbitos granulares:

pets:read
pets:create
pets:update
pets:delete

Ámbitos comodín:

pets:*        - Todas las operaciones de mascotas
*:read        - Leer todos los recursos
admin:*       - Acceso de administrador completo

Jerarquía de ámbitos

admin:all
  ├── pets:*
  │   ├── pets:read
  │   ├── pets:write
  │   └── pets:delete
  ├── orders:*
  │   ├── orders:read
  │   └── orders:write
  └── users:*
      ├── users:read
      └── users:write

Implementación de la validación de ámbitos

Enfoque con Middleware

function requireScopes(...requiredScopes) {
  return (req, res, next) => {
    const token = extractToken(req);
    const decoded = verifyToken(token);
    const tokenScopes = decoded.scope.split(' ');

    const hasAllScopes = requiredScopes.every(scope =>
      tokenScopes.includes(scope) || tokenScopes.includes('admin:all')
    );

    if (!hasAllScopes) {
      return res.status(403).json({
        error: 'insufficient_scope',
        required: requiredScopes,
        provided: tokenScopes
      });
    }

    req.user = decoded;
    next();
  };
}

// Uso
app.get('/v1/pets', requireScopes('pets:read'), getPets);
app.post('/v1/pets', requireScopes('pets:write'), createPet);
app.delete('/v1/pets/:id', requireScopes('pets:delete'), deletePet);

Enfoque con Decoradores (TypeScript)

function RequireScopes(...scopes: string[]) {
  return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
    const originalMethod = descriptor.value;

    descriptor.value = async function (...args: any[]) {
      const req = args[0];
      const res = args[1];

      const token = extractToken(req);
      const decoded = verifyToken(token);

      if (!hasScopes(decoded.scope, scopes)) {
        return res.status(403).json({ error: 'insufficient_scope' });
      }

      return originalMethod.apply(this, args);
    };
  };
}

// Uso
class PetsController {
  @RequireScopes('pets:read')
  async getPets(req, res) {
    const pets = await this.petService.findAll();
    res.json(pets);
  }

  @RequireScopes('pets:write')
  async createPet(req, res) {
    const pet = await this.petService.create(req.body);
    res.status(201).json(pet);
  }
}

Cómo la Modern PetstoreAPI usa los ámbitos

Ámbitos disponibles

pets:read          - Leer datos de mascotas
pets:write         - Crear/actualizar mascotas
pets:delete        - Eliminar mascotas
orders:read        - Leer pedidos
orders:write       - Crear pedidos
inventory:read     - Leer inventario
inventory:write    - Actualizar inventario
users:read         - Leer perfil de usuario
users:write        - Actualizar perfil de usuario
admin:all          - Acceso completo

Validación de ámbito

GET /v1/pets
Authorization: Bearer token_with_pets:read

200 OK
POST /v1/pets
Authorization: Bearer token_with_pets:read

403 Prohibido
{
  "error": "insufficient_scope",
  "required": ["pets:write"],
  "provided": ["pets:read"]
}

Ver la documentación de OAuth de Modern PetstoreAPI.

Prueba de ámbitos con Apidog

Apidog soporta la prueba de ámbitos de OAuth:

  1. Configure la autenticación OAuth 2.0
  2. Solicite ámbitos específicos
  3. Pruebe puntos finales con diferentes ámbitos
  4. Valide las respuestas 403 para ámbitos insuficientes

Mejores prácticas

1. Use ámbitos granulares - pets:read no read_all

2. Siga las convenciones de nomenclatura - formato recurso:acción

3. Documente todos los ámbitos - Liste en la documentación de la API

4. Valide en cada solicitud - No confíe en el cliente

5. Devuelva errores claros - Muestre los ámbitos requeridos versus los proporcionados

6. Use el principio de menor privilegio - Solicite los ámbitos mínimos necesarios

Conclusión

Los ámbitos de OAuth 2.0 proporcionan un control de acceso granular. Utilice el formato recurso:acción, valide en cada solicitud y documente todos los ámbitos. Modern PetstoreAPI demuestra una implementación de ámbitos lista para producción.

Preguntas frecuentes

¿Cuál es la diferencia entre ámbitos y roles?

Los ámbitos son permisos para los tokens de acceso. Los roles son grupos de usuarios con permisos asignados.

¿Se pueden tener múltiples ámbitos?

Sí, sepárelos con espacios: pets:read orders:read users:write

¿Cómo se revocan los ámbitos?

Revoque el token de acceso o emita un nuevo token con diferentes ámbitos.

¿Deberían los ámbitos estar en el JWT?

Sí, inclúyalos en la afirmación scope para una validación sin estado.

¿Qué tan granulares deben ser los ámbitos?

Equilibre la granularidad con la usabilidad. pets:read y pets:write suelen ser suficientes.

Practica el diseño de API en Apidog

Descubre una forma más fácil de construir y usar APIs