Ana Karargâh Neler Yapıyoruz?
Hikayemizin Perde Arkası Beyin Kıvılcımları Bağlantıya Geçin

OAuth 2.0 ve OpenID Connect: Modern Kimlik Doğrulama Protokolleri

Merhaba değerli okuyucular! Bugün, modern web ve mobil uygulamaların vazgeçilmez bileşenleri haline gelen OAuth 2.0 ve OpenID Connect protokollerini derinlemesine inceleyeceğiz. Bu protokoller, güvenli kimlik doğrulama ve yetkilendirme süreçlerini nasıl sağladıklarını ve neden bu kadar yaygın kullanıldıklarını ele alacağız. Hazırsanız, kimlik doğrulama dünyasının bu önemli oyuncularına yakından bakalım!

OAuth 2.0 Nedir?

OAuth 2.0, üçüncü taraf uygulamaların, bir kullanıcının kaynaklarına sınırlı erişim elde etmesini sağlayan bir yetkilendirme protokolüdür. Bu protokol, kullanıcıların şifrelerini paylaşmadan, uygulamalara belirli kaynaklara erişim izni vermelerini sağlar.

OAuth 2.0'ın Temel Bileşenleri:

  • Resource Owner: Genellikle son kullanıcı
  • Client: Kaynaklara erişmek isteyen uygulama
  • Authorization Server: Yetkilendirme token'larını veren sunucu
  • Resource Server: Korunan kaynakları barındıran sunucu

OAuth 2.0 Akışı:


+--------+                               +---------------+
|        |--(A)- Authorization Request ->|   Resource    |
|        |                               |     Owner     |
|        |<-(B)-- Authorization Grant ---|               |
|        |                               +---------------+
|        |
|        |                               +---------------+
|        |--(C)-- Authorization Grant -->| Authorization |
| Client |                               |     Server    |
|        |<-(D)----- Access Token -------|               |
|        |                               +---------------+
|        |
|        |                               +---------------+
|        |--(E)----- Access Token ------>|    Resource   |
|        |                               |     Server    |
|        |<-(F)--- Protected Resource ---|               |
+--------+                               +---------------+

OpenID Connect Nedir?

OpenID Connect (OIDC), OAuth 2.0 protokolü üzerine inşa edilmiş bir kimlik doğrulama katmanıdır. OIDC, OAuth 2.0'ın yetkilendirme özelliklerine ek olarak, kullanıcının kimliği hakkında bilgi sağlar.

OpenID Connect'in Temel Özellikleri:

  • ID Token: JWT (JSON Web Token) formatında kullanıcı bilgilerini içerir
  • UserInfo Endpoint: Kullanıcı hakkında ek bilgiler sağlar
  • Standart Claim'ler: Kullanıcı bilgileri için standartlaştırılmış alanlar

OAuth 2.0 vs OpenID Connect

Özellik OAuth 2.0 OpenID Connect
Amaç Yetkilendirme Kimlik Doğrulama + Yetkilendirme
Token Tipi Access Token ID Token + Access Token
Kullanıcı Bilgisi Doğrudan sağlamaz ID Token içinde sağlar

OAuth 2.0 Akış Türleri

1. Authorization Code Flow

En güvenli ve yaygın kullanılan akış türüdür. Sunucu taraflı uygulamalar için idealdir.


// Yetkilendirme İsteği
GET /authorize?
    response_type=code&
    client_id=CLIENT_ID&
    redirect_uri=REDIRECT_URI&
    scope=read&
    state=RANDOM_STATE HTTP/1.1
Host: authorization-server.com

// Token İsteği
POST /token HTTP/1.1
Host: authorization-server.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&
code=AUTH_CODE_HERE&
redirect_uri=REDIRECT_URI&
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET

2. Implicit Flow

Tarayıcı tabanlı veya mobil uygulamalar için tasarlanmıştır. Güvenlik açısından daha risklidir ve artık pek önerilmemektedir.


// Yetkilendirme İsteği
GET /authorize?
    response_type=token&
    client_id=CLIENT_ID&
    redirect_uri=REDIRECT_URI&
    scope=read&
    state=RANDOM_STATE HTTP/1.1
Host: authorization-server.com

3. Resource Owner Password Credentials Flow

Kullanıcı adı ve şifrenin doğrudan uygulamaya girildiği durumlarda kullanılır. Yüksek güven gerektirir.


POST /token HTTP/1.1
Host: authorization-server.com
Content-Type: application/x-www-form-urlencoded

grant_type=password&
username=USERNAME&
password=PASSWORD&
client_id=CLIENT_ID

4. Client Credentials Flow

Uygulama kendi adına kaynaklara erişmek istediğinde kullanılır. Kullanıcı etkileşimi yoktur.


POST /token HTTP/1.1
Host: authorization-server.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET

OpenID Connect Akışları

1. Authorization Code Flow

OAuth 2.0'daki gibidir, ancak ek olarak bir ID Token döner.

2. Implicit Flow

OAuth 2.0'daki Implicit Flow'a benzer, ancak ID Token da döner.

3. Hybrid Flow

Authorization Code ve Implicit Flow'un bir kombinasyonudur.

Güvenlik Önlemleri

  1. HTTPS Kullanımı: Tüm iletişim HTTPS üzerinden yapılmalıdır.
  2. State Parametresi: CSRF saldırılarına karşı koruma sağlar.
  3. PKCE (Proof Key for Code Exchange): Authorization Code akışını daha güvenli hale getirir.
  4. Token Doğrulama: ID Token'ların imzası ve içeriği doğrulanmalıdır.
  5. Kısa Ömürlü Token'lar: Access Token'lar kısa ömürlü olmalı ve gerektiğinde yenilenmelidir.

Uygulama Örneği: Node.js ile OAuth 2.0 Client

İşte basit bir Node.js OAuth 2.0 client örneği:


const axios = require('axios');
const express = require('express');
const app = express();

const config = {
    client_id: 'YOUR_CLIENT_ID',
    client_secret: 'YOUR_CLIENT_SECRET',
    redirect_uri: 'http://localhost:3000/callback',
    auth_url: 'https://authorization-server.com/auth',
    token_url: 'https://authorization-server.com/token',
    scope: 'read'
};

app.get('/login', (req, res) => {
    const authUrl = `${config.auth_url}?response_type=code&client_id=${config.client_id}&redirect_uri=${config.redirect_uri}&scope=${config.scope}`;
    res.redirect(authUrl);
});

app.get('/callback', async (req, res) => {
    const { code } = req.query;
    try {
        const response = await axios.post(config.token_url, {
            grant_type: 'authorization_code',
            client_id: config.client_id,
            client_secret: config.client_secret,
            code,
            redirect_uri: config.redirect_uri
        });
        const accessToken = response.data.access_token;
        // Access token'ı kullan...
        res.send('Başarıyla giriş yapıldı!');
    } catch (error) {
        res.status(500).send('Bir hata oluştu');
    }
});

app.listen(3000, () => console.log('Server running on http://localhost:3000'));

Güvenli Kimlik Doğrulama için OAuth 2.0 ve OpenID Connect

OAuth 2.0 ve OpenID Connect, modern web ve mobil uygulamaların güvenli kimlik doğrulama ve yetkilendirme ihtiyaçlarını karşılamak için tasarlanmış güçlü protokollerdir. Bu protokolleri anlamak ve doğru şekilde uygulamak, uygulamalarınızın güvenliğini önemli ölçüde artırır.

Unutmayın ki, güvenlik sürekli bir süreçtir. Bu protokolleri kullanırken en güncel güvenlik pratiklerini takip etmek, düzenli güvenlik denetimleri yapmak ve yeni tehditlere karşı her zaman tetikte olmak önemlidir.


class SecurityMindset {
    constructor() {
        this.protocols = ['OAuth 2.0', 'OpenID Connect'];
        this.bestPractices = [
            'HTTPS Everywhere',
            'Token Validation',
            'Secure Storage',
            'Regular Audits'
        ];
    }

    implementSecureAuth() {
        this.protocols.forEach(protocol => this.study(protocol));
        this.bestPractices.forEach(practice => this.apply(practice));
        this.stayUpdated();
    }

    stayUpdated() {
        // Sürekli öğren ve güvenliği geliştir!
        setInterval(() => this.learnNewThreats(), 24 * 60 * 60 * 1000); // Her gün
    }
}

const developer = new SecurityMindset();
developer.implementSecureAuth();

Siz OAuth 2.0 veya OpenID Connect kullanıyor musunuz? Uygulamalarınızda nasıl bir kimlik doğrulama stratejisi izliyorsunuz? Karşılaştığınız zorluklar veya paylaşmak istediğiniz deneyimler var mı? Yorumlarınızı bekliyoruz!

Güvenli kodlamalar ve güvenli kimlik doğrulamaları dilerim!