Çapraz etki alanı oturum açma - ne veritabanında saklamak için?

1 Cevap php

Bana çeşitli etki aracılığıyla aynı sisteme giriş sağlayacak bir sistem üzerinde çalışıyorum. (Www.example.com, www.mydomain.com, sub.domain.com vb)

The following threads form the basis of my research so far:
Single Sign On across multiple domains
Cross web domain login with .net membership

Ne olmasını istiyorum ben master etki üzerinde giriş ve ben bir slave etki bir sayfasını ziyaret ediyorum ederseniz otomatik olarak köle giriş yapmalısınız olmasıdır.

Ben asıl üzerinde giriş değilim Eğer Açıkçası, benim kullanıcı adı ve şifrenizi girmeniz gerekir.

Walkthrough:
1. User logs in on master site
2. User navigates to slave site
3. Slave site re-directs to master site to see if User is logged in.
4. If User is logged in on master, record a RFC 4122 token ID and send this back to the slave site.
5. Slave site then looks up the token ID in the central database and logs this user in.

Bu sonuçta PHP ve Apache kereden fazla örneği üzerinde çalışan sonunda olabilir, bu yüzden yapamam sadece mağaza:

token_id, php_session_id, created

Bana depolamak ve bu kullanarak herhangi bir sorun var mı:

token_id, username, hashed_password, created

Kullanımı, silinen veya otomatik x saniye sonra hangi.

1 Cevap

Veritabanında depolamak için ne unutun - - Temel fikir bakın ama onun da çok oturum yönetimi hakkında konuşurken bağlantı Tamam yapmanız gereken tüm ana ve istemciler üzerinde oturumları aktif. Ve (kullanıcı has doğrulanmış ise öncelikle böylece görebilirsiniz) oturumda authenticated adınızı saklayın.

  1. Kullanıcı istemci siteye gider
  2. Müşteri site Kullanıcı oturum olup olmadığını görmek için siteyi master yeniden yönlendirir

Hayır - sadece slave site kullanıcı doğrulanmış değil belirlerse (bir istemci kafa karıştırıcı alır çağırarak) köle sitesinden yönlendirme.

RFC 4122 unut - session tanımlayıcı olarak bakın yazı kullanılmaktadır UUIDs almak için onun sadece bir akıllı yol. PHP zaten gayet iyi değerler üretir.

Siz kullanıcı kimliği ve kullanıcı URL doğrulanmış oldu (etki alanları arasında çerezleri transfer edemez ve bir POST yapamayacağı gerçeğini sağlayan köle geri ustadan mesaj çeşit geçmesi gerekiyor Bir yönlendirme). Bunu yapmanın bir yolu bariz sonra, master ve slave hem de paylaşılan bir sır var olacaktır ....

$redirect_to='http://slave.example.com/sso_lander.php?auth_token=' 
       . encrypt($some_random_alphanum_chars 
         . '/' . $user . '/' 
         . time(), $shared_secret);
header("Location: $redirect_to", true, 303);

Sonra köle üzerinde:

if (!($_SESSION['authenticated_user']) && $_GET['auth_token']) {
    $auth_token=explode('/',decrypt($_GET['auth_token'], $shared_secret));
    if ((abs($auth_token[2]-time())<3) {
          // if more than 3 seconds after generate - DO NOT USE
          $_SESSION['authenticated_user']=$auth_token[1];
    }
}

Yukarıda sadece bilgilendirme amaçlıdır Not - küçük bir pencere derli toplu olmalı tekrar saldırılara ve diğer şeyler için hala açık olduğu kadar iyi bir çözüm köle onu master yerel oturumda ve kopya saklanan bir sorun üretir olduğunu. Master şifrelenmiş cevapta bu içerir. Ama bu kod biraz daha karmaşıktır.

C.