Müşteri Adına Oturum Açma

1.7k görüntülenme Markdown

Kendi sisteminizden bir müşteriye giriş yapılmış oturum devredin; parolasını hiç görmeden.

Genel Bakış

İki uç, müşterinin sizin sisteminizden kendi paneline geçtiği anı karşılar.

POST /clients/validate Bir e-posta ve parolanın canlı bir müşteri hesabına ait olup olmadığını kontrol eder. Kimlik bilgilerini sizin arayüzünüz toplar, bu uç arkasındaki müşteriyi söyler.
POST /clients/sso Tek kullanımlık bir giriş bileti ve onu harcayan adresi üretir. Müşteriyi oraya gönderirsiniz, giriş yapmış olarak varır.

Ziyaretçinin kim olduğunu zaten biliyorsanız ikincisini kullanın: kendi portalınız, bir kontrol paneli, bir destek aracı. Birincisi yalnız parolayı siz soruyorsanız gerekir.

Ön Koşullar

Scope Clients/ValidateClient ve Clients/CreateClientSsoToken. Yalnız kullandığınızı verin.
Hesap durumu Müşteri aktif bir üye hesabı olmalı. Pasif ya da engelli hesaplar bilet üretilirken reddedilir.
HTTPS Bilet adresin içinde taşınır. Yönlendirmeyi HTTPS üzerinden yapın ki yolda okunamasın.

Yapı

Bilet bir veri paketi değil, rastgele bir gizli değerdir. Girişin ihtiyaç duyduğu her şey — son geçerlilik ve inilecek sayfa — hesapta saklanır. Böylece çağıranın eline geçen değer başka bir hedefe ya da daha uzun bir süreye çevrilemez.

Auth::createSsoToken() Bileti üretir, hesapta şifreli saklar ve adresi döndürür.
Auth::verifySsoToken() Bileti çözer ve oturum kurulmadan önce harcar.
Auth::ssoLogin() Olağan giriş kapısını işletir, sonra oturumu açar.

Adım Adım

Müşteriyi İçeri Almak

  1. Sisteminiz bu ziyaretçinin hangi müşteri olduğuna karar verir. O müşterinin kimliğiyle POST /clients/sso çağırın. Yanıtta token, url ve expires_at döner.
  2. Ziyaretçiyi hemen url adresine yönlendirin. Sonrası için bağlantı olarak göstermeyin — bilet 60 saniye geçerlidir.
  3. Ziyaretçi giriş yapmış olarak varır; panosuna ya da destination ile belirttiğiniz sayfaya. Bilet harcanmıştır, aynı adres ikinci kez çalışmaz.

İnilecek Sayfayı Seçmek

  1. destination vermezseniz müşteri panosuna iner.
  2. Daha derine indirmek için route anahtarını parametreleriyle gönderin: "destination": "services", "destination_values": [128].
  3. Mutlak adres de çalışır, yeter ki bu kuruluma ait olsun. Başka bir yeri gösteren adres yok sayılır ve müşteri panosuna iner.

Referans

Bilet İsteği

client_id Zorunlu. Bilet üretilecek müşteri. user_id eski adı olarak da kabul edilir.
destination İsteğe bağlı. Bir route anahtarı ya da bu kuruluma ait mutlak adres.
destination_values İsteğe bağlı. destination bir route anahtarıysa route parametreleri.

Biletin Davranışı

Tek kullanımlık Adres açıldığı anda harcanır. Tekrar kullanılan bağlantı, açıklamalı bir mesajla giriş formuna iner.
Altmış saniye Üretin ve aynı hamlede izleyin.
Müşteri başına bir tane Yeni bilet, o müşterinin önceki biletini sessizce geçersiz kılar.
Giriş kapısı Hesap durumu, ülke engeli ve modül vetoları bilet harcanırken denetlenir; parolayla girişteki gibi.
Kayıtlı parola Hesapta olmalı. İçe aktarılan bazı hesapların parolası yok: bilet harcanır ve giriş formu sebebini gösterir.

Alan tabloları, hata kodları ve yanıt şekilleri clients uç referansındadır.

Örnek

Bilet üret ve yönlendir
curl -X POST 'https://panel.example.com/api/v1/admin/clients/sso' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"client_id":64,"destination":"services","destination_values":[128]}'
const res = await fetch('https://panel.example.com/api/v1/admin/clients/sso', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    client_id: 64,
    destination: 'services',
    destination_values: [128],
  }),
});

const body = await res.json();

// Yonlendirmeyi anahtari tutan sunucudan yapin, ziyaretcinin tarayicisindan degil:
// bilet bir kimlik bilgisidir, guvenilmeyen koddan gecmemelidir.
res.ok && console.log(body.data.url);
<?php

$ch = curl_init('https://panel.example.com/api/v1/admin/clients/sso');

curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode(['client_id' => 64]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);

// Ziyaretciyi hemen gonderin; bilet 60 saniye sonra gecersiz olur.
header('Location: ' . $body['data']['url']);
exit;
$response = Api::Clients()->CreateClientSsoToken([
    'client_id'   => 64,
    'destination' => 'services',
    'destination_values' => [128],
]);

// Anahtar yok, HTTP turu yok — ayni kaynak, surec icinde cagrilir.
Utility::redirect($response['data']['url']);

Tuzaklar

Bilet bir kimlik bilgisidir. Adresi açan kişi o müşteri olur. Kayda geçirmeyin, e-postayla göndermeyin, üçüncü kişinin okuyabileceği bir sayfaya koymayın.

Önceden bilet üretmeyin. Bilet 60 saniye yaşar ve müşteri aynı anda bir tane taşır; toplu üretim elinizde tek çalışan bilet bırakır.

Doğrulama kimseyi içeri almaz. Yalnız parolanın eşleşip eşleşmediğini söyler. Oturum istiyorsanız ardından bilet üretin.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.