KampüsteyimAPP

Geliştiriciler için

Kampüsteyim ile doğrulanmış öğrenci girişi

Platformunuza “Kampüsteyim ile devam et” butonunu ekleyin. Öğrencinin doğrulanmış olup olmadığını güvenli, şifreli API ile öğrenin — kişisel veri asla dönmez.

Ne sağlar?

Şimdilik tek yetenek: öğrencinin Kampüsteyim’de doğrulanmış üye olup olmadığını öğrenmek. İleride kapsam genişleyecek.

OTP ile üyelik

E-posta + telefon. Kod mail ile gelir; API anahtarı hesabınız açılınca size mail edilir.

Şifreli yanıt

Sorgu düz metin döndürmez. AES-256-GCM zarf + ayrı unwrap isteği; çözümleme SDK içinde, sistemler arasında kalır.

Rate & güvenlik

Dakika/gün limitleri, HTTPS zorunluluğu, SDK başlıkları, IP/fingerprint değişiminde unwrap reddi.

Admin kontrolü

Hesap ban, karantina, API revoke/silme ve limit ayarı Kampüsteyim admin panelinden yönetilir.

Akış (özet)

  1. Kullanıcı platformunuzda Kampüsteyim butonuna basar.
  2. Öğrenci Kampüsteyim’de oturum açıp “doğrulama durumumu paylaş” der → tek kullanımlık assertionCode.
  3. Sunucunuz POST /api/v1/student/verify-status çağırır → şifreli zarf.
  4. POST /api/v1/crypto/unwrap ile DEK alınır; SDK ciphertext’i yerelde çözer.
Dönen alanlar yalnızca verified, accountStatus, isStudent, checkedAt. İsim, e-posta, öğrenci no vb. asla yoktur.

Endpoint’ler

Base: https://kampusteyim.app/api

POST /v1/student/verify-status
Headers:
  X-Api-Key: kt_live_...
  X-Kampusteyim-Client: sdk/1.0.0
  X-Kampusteyim-Fingerprint: <oturum parmak izi>
  X-Request-Id: <uuid>
Body: { "assertionCode": "kt_assert_..." }

→ { alg, ciphertext, iv, tag, unwrapId, expiresInSec }

POST /v1/crypto/unwrap
Body: { "unwrapId": "..." }
→ { alg, dek }   // düz metin veri yok; SDK decrypt eder

Kurulum (adım adım)

Portal hesabı → buton → callback → şifreli verify. Ayrıntılı metin SDK paketinde SETUP.md.

① Client ID ≠ ② Gizli API Key
Client ID = anahtarın kısa ön eki → butonda client_id= (frontend OK).
Gizli API Key = uzun tam kt_live_… → yalnız sunucu X-Api-Key / KAMPUSTEYIM_API_KEY. Butona koyma.
  1. Hesap: Portal → OTP. Mail + ekranda hem Client ID hem gizli Key gelir.
  2. Env: KAMPUSTEYIM_CLIENT_ID = ① · KAMPUSTEYIM_API_KEY = ② (server-only).
  3. Buton: …/authorize?client_id=CLIENT_ID&redirect_uri=… — stil serbest.
  4. Callback: ?code=kt_assert_… → sunucuda verify + unwrap (gizli Key ile).
  5. Gate: verified === true && isStudent === true.
AI ile kur: Promptu kopyalayıp Cursor / ChatGPT / Claude’a yapıştırın; proje klasörünü verin — buton + callback + env örneğini üretir.
AI prompt sayfası →

Express callback örneği

import { verifyStudentEncrypted } from '@kampusteyim/verify';

app.get('/kampusteyim/callback', async (req, res) => {
  const { code, state, error } = req.query;
  if (error || !code) return res.status(400).send('iptal');
  // state === session.state kontrol edin
  const result = await verifyStudentEncrypted({
    apiKey: process.env.KAMPUSTEYIM_API_KEY,
    assertionCode: String(code),
  });
  // { verified, accountStatus, isStudent, checkedAt }
  if (result.verified && result.isStudent) {
    req.session.ktVerified = true;
    return res.redirect('/app');
  }
  return res.status(403).send('doğrulama yetersiz');
});

SDK paketi

Kaynak: repo içi sdk/kampusteyim-verify/ — SETUP.md, AI_PROMPT.md, src/.

npm install ./vendor/kampusteyim-verify

import { verifyStudentEncrypted } from '@kampusteyim/verify';
import { authorizeUrl, KampusteyimButtonMarkup } from '@kampusteyim/verify/button';

// Buton URL
const href = authorizeUrl({
  clientId: process.env.KAMPUSTEYIM_CLIENT_ID, // prefix
  redirectUri: 'https://sizin-site.com/kampusteyim/callback',
  state: crypto.randomUUID(),
});

// Callback’te (yalnız sunucu)
const result = await verifyStudentEncrypted({
  apiKey: process.env.KAMPUSTEYIM_API_KEY,
  assertionCode: code,
  baseUrl: 'https://kampusteyim.app/api',
});