OAuth 2.0 Kapsamları Nelerdir ve Nasıl Çalışır?

Ashley Innocent

Ashley Innocent

13 March 2026

OAuth 2.0 Kapsamları Nelerdir ve Nasıl Çalışır?

Kurumsal Apidog

Şirket İçi Dağıtım

SSO & RBAC

SOC 2 Uyumlu

Apidog Enterprise'ı Keşfet

Kısaca

OAuth 2.0 kapsamları (scopes), bir erişim token'ının ne yapabileceğini tanımlayan izin dizeleridir. pets:read veya orders:write gibi kaynak:eylem formatını kullanın. Yetkilendirme sırasında kapsamları isteyin, API uç noktalarında doğrulayın. Modern PetstoreAPI, evcil hayvanlara, siparişlere ve kullanıcı verilerine okuma/yazma erişimi için kapsamlar uygular.

Giriş

Üçüncü taraf bir uygulama, evcil hayvan mağazanızın envanterini okumak istiyor. Sipariş oluşturma, evcil hayvan silme ve kullanıcıları yönetme gibi tam erişime sahip olmalı mı? Hayır. Yalnızca envanteri okumalıdır.

OAuth 2.0 kapsamları bunu çözer. Kapsamlar, bir erişim token'ının hangi izinlere sahip olduğunu tanımlar. Uygulama inventory:read kapsamını ister. API'niz, veriyi döndürmeden önce token'ın bu kapsama sahip olduğunu doğrular.

Modern PetstoreAPI, tüm kaynaklar için (evcil hayvanlar, siparişler, envanter ve kullanıcılar) ayrıntılı kapsamlar uygular.

OAuth API'lerini test ediyorsanız, Apidog kapsam doğrulama ve yetkilendirme akışlarını test etmenize yardımcı olur.

düğme

OAuth 2.0 Kapsamları Nelerdir?

Kapsamlar, OAuth erişim token'larına dahil edilen izin dizeleridir.

Kapsam Formatı

pets:read          - Evcil hayvan verilerini oku
pets:write         - Evcil hayvan oluştur/güncelle
orders:read        - Siparişleri oku
orders:write       - Sipariş oluştur
admin:all          - Tam yönetici erişimi

OAuth Akışında Kapsam

1. Yetkilendirme İsteği:

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

2. Kullanıcı Onayı:

"PetFinder" uygulaması şunları istiyor:
- Evcil hayvanlarınızı okuma
- Siparişlerinizi okuma

[İzin Ver] [Reddet]

3. Erişim Token'ı:

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

4. API İsteği:

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

200 OK (kapsam doğrulandı)

Kapsamlar Nasıl Çalışır?

Token Kapsamları İçerir

Erişim token'ı verilen kapsamları içerir:

// Çözülmüş JWT
{
  "sub": "user-456",
  "scope": "pets:read orders:read",
  "exp": 1710331200
}

API Kapsamları Doğrular

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: `Gereken kapsam: ${requiredScope}`
      });
    }

    next();
  };
}

Kapsam Tasarımı

Kapsam Adlandırma Kuralları

Kaynak:Eylem Deseni:

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

Ayrıntılı Kapsamlar:

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

Joker Kapsamlar:

pets:*        - Tüm evcil hayvan işlemleri
*:read        - Tüm kaynakları oku
admin:*       - Tam yönetici erişimi

Kapsam Hiyerarşisi

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

Kapsam Doğrulamayı Uygulama

Middleware Yaklaşımı

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();
  };
}

// Kullanım
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);

Decorator Yaklaşımı (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);
    };
  };
}

// Kullanım
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);
  }
}

Modern PetstoreAPI Kapsamları Nasıl Kullanır?

Mevcut Kapsamlar

pets:read          - Evcil hayvan verilerini oku
pets:write         - Evcil hayvan oluştur/güncelle
pets:delete        - Evcil hayvan sil
orders:read        - Siparişleri oku
orders:write       - Sipariş oluştur
inventory:read     - Envanteri oku
inventory:write    - Envanteri güncelle
users:read         - Kullanıcı profilini oku
users:write        - Kullanıcı profilini güncelle
admin:all          - Tam erişim

Kapsam Doğrulama

GET /v1/pets
Authorization: Bearer token_with_pets:read

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

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

Modern PetstoreAPI OAuth dokümantasyonuna bakın.

Apidog ile Kapsamları Test Etme

Apidog OAuth kapsam testini destekler:

  1. OAuth 2.0 kimlik doğrulamasını yapılandırın
  2. Belirli kapsamları isteyin
  3. Farklı kapsamlarla uç noktaları test edin
  4. Yetersiz kapsamlar için 403 yanıtlarını doğrulayın

En İyi Uygulamalar

1. Ayrıntılı kapsamlar kullanın - read_all yerine pets:read

2. Adlandırma kurallarına uyun - kaynak:eylem formatı

3. Tüm kapsamları belgeleyin - API dokümantasyonunda listeleyin

4. Her istekte doğrulama yapın - İstemciye güvenmeyin

5. Açık hatalar döndürün - İstenen ve sağlanan kapsamları gösterin

6. En az ayrıcalık ilkesini kullanın - Gereken minimum kapsamları isteyin

Sonuç

OAuth 2.0 kapsamları, ayrıntılı erişim kontrolü sağlar. kaynak:eylem formatını kullanın, her istekte doğrulayın ve tüm kapsamları belgeleyin. Modern PetstoreAPI, üretime hazır kapsam uygulamasını gösterir.

Sıkça Sorulan Sorular

Kapsamlar ve roller arasındaki fark nedir?

Kapsamlar, erişim token'ları için izinlerdir. Roller ise atanan izinlere sahip kullanıcı gruplarıdır.

Birden fazla kapsama sahip olabilir misiniz?

Evet, boşluklarla ayırın: pets:read orders:read users:write

Kapsamları nasıl iptal edersiniz?

Erişim token'ını iptal edin veya farklı kapsamlarla yeni bir token verin.

Kapsamlar JWT içinde olmalı mı?

Evet, durum bilgisiz doğrulama için scope talebine (claim) dahil edin.

Kapsamlar ne kadar ayrıntılı olmalı?

Ayrıntı düzeyi ile kullanılabilirlik arasında denge kurun. Genellikle pets:read ve pets:write yeterlidir.

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin