Drupal'ın oturum yönetimini ve kullanıcı kimlik doğrulamasını anlama


16

Burada, varsayılan kullanıcı kimlik doğrulamasını merkezi bir sunucunun kimlik doğrulamasıyla değiştirmek zorunda kaldım, yani SSO sunucusu.
Drupal'da hata ayıklayarak tüm oturum yönetiminin includes/session.incdosyada olduğunu öğrendim . Resimde gösterildiği gibi kimlik doğrulaması yapmak istiyorum:

ani

SENARYO: Giriş
Adımların detayları:

  1. Kullanıcı adını ve parolayı SSO sunucusuna göndermek için giriş formunu değiştirin ( Drupal'da değil, .NET'te).
  2. Bu sitenin veritabanını kullanarak TOA sunucusundaki kullanıcının kimliğini doğrulayın; ve web sitemin bazı özel PHP sayfalarına (veya bir modülün formuna mı?) yanıt gönderebilirim .
  3. Yanıtı kullanarak, kullanıcı tablosunda kullanıcıyı tanımlayın ve parolayı denetlemeden bu kullanıcı için bir oturum oluşturun (çift kimlik doğrulaması anlamına gelir). Varsayılan olarak, Drupal $insecure_session_namedeğişken adı ve değeri olan bir çerez ayarlar $sid. Drupal'ın burada çerezi ayarlamamasını, değişkenlerin değerlerini TOA sunucusuna göndermesini istiyorum.
  4. TOA sunucusu değerleri alır, bir çerez oluşturur ve ana etki alanına domain.combırakır (her ikisini de hatırlatmak my websiteve sso serverDrupal'da olmayan ana etki alanının alt etki alanındadır). Ardından, drupal sitesi bu çerezi kullanarak giriş yapabilir.

Zor bir soru olduğunu biliyorum, nasıl başlamam gerektiğine dair işaretçiler arıyorum. dedikleri gibi "çekirdeği hacklememelisin". Yani, sorularım:

  1. Drupal kimlik doğrulaması ve oturum yönetiminin nasıl çalıştığını anlamak için nereyi aramalıyım?
  2. includes/session.incKancaları kullanırken işlevleri çağırabileceğim bir yol var mı (işlevlerle ilgili yorumların "yalnızca dahili kullanım için / değiştirilmemesi" dediği gibi)?

NOT: Kaydı SSO sunucusunun merkezi veritabanında kalması için kullanıcıyı kaydetmek için aynı yöntemi kullanacağım. Ve bu sırada Drupal sitesinin veritabanında aynı kullanıcı için bazı önemsiz parolalar koyacaktır (giriş sırasında parola kontrol edilmeyeceğinden).


Gerçek TOA'ya (bir siteye giriş yapın ve tüm sitelere giriş yaptınız) mı yoksa sadece bir dış sisteme karşı kimlik doğrulamanız mı gerekiyor?
mpdonadio

@MPD Bir sitede oturum açmayı ve -> tüm sitelerde aynı kullanıcının kimliğini doğrulamayı gerektiren gerçek bir TOA istiyorum (Drupal'da olmayabilir.
AjitS

@AjitS başarıyla uyguladıysanız, lütfen ayrıntılı cevap koyabilirsiniz. user_login_finalize kullanıyorum ama Drupal ayrıntılarını saklayamıyorum GDPR sorunları nedeniyle söylüyorum.
Jignesh Rawal

Yanıtlar:


17

Drupal harici kimlik doğrulamayı destekler . Drupal için OpenID (çekirdeğe dahil), OAuth Connector veya LDAP gibi birçok alternatif kimlik doğrulama modülü vardır . Drupal kimlik doğrulamasının nasıl çalıştığı hakkında daha fazla bilgi edinin; en iyisi OpenID ve OAuth modüllerine bakmak ve çekirdek giriş formuna geri arama göndermek olacaktır. Ancak, AFAIK, başarılı bir kimlik doğrulamasından sonra her zaman normal Drupal oturumuna başlarlar.

Oturum yönetimi için Drupal, PHP oturum yönetimine bağlanır ve kendi işleyicilerini kaydeder. Drupal oturum arka ucu kendiliğinden takılabilir, session_incdeğişkeni bulunan işlevlerin alternatif uygulamalarını sağlayan bir dosyanın yoluna ayarlayabilirsiniz includes/session.inc. Memcache'ı modül memcached içinde oturumu depolamak için kullanın.

Referanslar için OpenID modül tanıtıcı başarılı kimlik doğrulama openid_authentication()kendisi hangi ceats kullanıcı giriş formu ve çağrı işleyicisi göndermek (yani. user_login_submit()). Bu gönderme işleyicisinin kendisi basittir, başarıyla kimliği doğrulanmış kullanıcıyı user_load()genel $userdeğişkene yükler , daha sonra user_login_finalize()hangi oturum işlemek, usertablodaki oturum açma zaman damgasını çağırır ve hook_user_login()uygulamaları çağırır .

Başka bir seçenek de user_external_login_register()işlevi kullanmasıdır . İşlev harici bir kullanıcıyı oturum açar. Gerekirse yerel bir kullanıcı da oluşturur. Eğer yerel kullanıcı oluşturma konusunda daha fazla kontrole gerekiyorsa, her zaman kullanabilir user_save(), user_set_authmaps(), user_login_submit()ve user_external_load()kullanarak, gelen özel çağrı user_external_login_register()yapılması gerektiğini şeyin şablon olarak.


2
Bu hemen hemen nokta. Harici kullanıcılarda oturum açmanın Drupal tarafı şaşırtıcı derecede kolaydır. Ağır kaldırma (eğer varsa) aslında harici sistemle arayüz oluşturur.
mpdonadio

@MPD Benim durumumda tam tersini bulmak. Harici sistem = JSON web servisi = nispeten kolay şeyler. Drupal davranışı = beklenmedik bir şekilde versiyondan versiyona değişme = cehennem kadar zor ve işler bozulduğunda faydalı bir teşhis yok.
Trejkaz

1

user_authenticate () APi burada kullanışlı olabilir.

3.Yanıt kullanarak, kullanıcı tablosunda kullanıcıyı tanımlayın ve şifreyi kontrol etmeden bu kullanıcı için bir oturum oluşturun (çift kimlik doğrulama anlamına gelir). Varsayılan olarak, Drupal $insecure_session_namedeğişken adı ve değeri olan bir çerez ayarlar $sid. Drupal'ın burada çerezi ayarlamamasını, değişkenlerin değerlerini TOA sunucusuna göndermesini istiyorum.

DÜZENLEME: TOA sunucusu gerçek ile geri döndüğünde, otomatik olarak sizin için oturumlarla ilgilenecek kullanıcı oturum açmak için bu API kullanın. Tek başına user_authenticate()oturumlar oluşturmak yerine bunu kullanmanın daha iyi olduğunu düşünüyorum . Geçerli bir p-assowrd sağlandığı sürece, çift kimlik doğrulaması bile bir sorun oluşturmamalıdır.

4'ten emin değilim. Çerezin her iki alanda da görünmesini istiyor musunuz? Öyleyse, settings.php dosyasında $cookie_domainetki alanını başlatın . Ardından, alt sitedeki çerezler üst sitede kullanılabilir.


cevabınız için teşekkürler. Kullanamıyorum, user_authenticateçünkü kimlik doğrulamasının Drupal sitesinde gerçekleşmesi gerekmiyor. Oturumu arayarak drupal_session_generate()ve drupal_session_regenerate()session.inc dosyasından oluşturabilirim. Çerez gereksinimi hakkında doğru bilgi aldınız .. lütfen düzenlemeye bakın.
AjitS

@indrock Bu bağlantıyı kontrol edin. User_authenticate, kullanıcı adı ve şifrenin doğru olması koşuluyla bir kullanıcı oturum açmanıza olanak tanır. Adım 3'te, kullanıcı adı ve geçişin TOA sunucusunda doğru olduğunu doğruladığınızda, kullanıcı oturum açmak için bu API'yı kullanın. Ancak şifre Drupal'da saklanmalıdır. Bunu yapmak çekirdeği hacklemekten çok daha kolay hale getirecektir.
GoodSp33d
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.