3. taraf siteyle tek oturum açma için API oluşturma


13

Sitemin, yazılım şirketi tarafından barındırılan kendi alt etki alanında yaşayacak bir 3. taraf yazılımı ile entegre olması gerekiyor. Üçüncü taraf geliştiricilere, sitemin kullanıcılarının alt etki alanına erişmesine izin vermek için API çağrıları (benim wordpress siteme) yapmak için kullanabileceği bir uç nokta sağlaması gerekiyor.

Diğer sitenin, bir tür API aracılığıyla kullanıcıları sitemden doğrulaması gerekiyor.

Nereden başlayacağımdan emin değilim, ama bence bu benden daha akıllı insanlar tarafından çözüldü. Şimdiden teşekkürler!


1
Ne tür API çağrıları gerekli olacak? Ne yapmaya çalışıyorsun? WP'nin XML-RPC desteğine baktınız ( codex.wordpress.org/XML-RPC_Support )?
anu

Diğer sitenin WP sitemdeki kullanıcıları doğrulaması / doğrulaması gerekiyor.
emersonthis

Yanıtlar:


16

Siteler Arası Komut Dosyası Sorunları

Alanlar arasında WP yetkilendirme çerezlerini aktaramazsınız. Ayrıca, programlı olarak başka bir WP kurulumuna giriş yapmak için düz metin şifreleri saklamak da istemezsiniz. Bu nedenle, kullanıcıların WordPress'e giriş yapması ve ardından üçüncü taraf sitesinden bir API bitiş noktası aracılığıyla giriş durumlarına erişmesi gerekir. Bu, WordPress'in tüm kimlik doğrulamasını işlemesini sağlar. API uç noktasının verileri üçüncü tarafa sunabilmesi için bir kullanıcının WP tarafına fiziksel olarak giriş yapması gerekeceğinden oldukça güvenlidir.

Bir API Bitiş Noktası oluşturma

Buraya az önce yazdığım bu makaleye göz atın: http://coderrr.com/create-an-api-endpoint-in-wordpress/

Ayrıca, kod gösterisini burada görebilirsiniz: https://gist.github.com/2982319

Kendi uygulama ihtiyaçlarınız için mantığı bulmanız gerekecek, ancak bu, WordPress tarafından istediğiniz her şeyi sunabileceğiniz bir uç nokta oluşturmanıza izin verecektir.

Kimlik doğrulama sitesi olarak WordPress kullandığınızdan, is_user_oked_in () gibi bir kontrol kullanabilirsiniz. Oturum açtılarsa, ihtiyaç duydukları bilgileri içeren bir kullanıcı nesnesini üçüncü tarafa iade edin.

Üçüncü Taraftan Oturum Açma

Üçüncü taraftan, redirect_to sorgu var'ı kullanarak sorunsuz bir deneyim için giriş sayfanıza bağlanabilirler. Giriş yaptıktan sonra, bunları üçüncü taraf sitesine geri gönderir.

http://sub.yourdomain.com/wp-login.php?redirect_to=http%3A%2F%2Fwww.third-party-domain.com

Uzaktan Girişler

Kullanıcıları üçüncü taraf bir siteden WordPress'e giriş yapmanız gerekiyorsa, bu sitede listelenen bazı basit WP işlevlerini kullanabilirsiniz: http://kuttler.eu/code/log-in-a-wordpress-user-programmatically/

Kesinlikle paylaşılan bir sır kullanmanız ve işleri güvende tutmak için bu sırdan zamana dayalı karmalar oluşturmanız gerekir. Temel olarak, şöyle görünecektir:

Üçüncü taraf, zaman damgası ve paylaşılan bir sır tarafından oluşturulan bir jetonla istek gönderir:

$shared_secret = 'foobar'; //do not send this to the API endpoint
$timestamp = time();
$token = md5($shared_secret.$time_stamp);

WordPress Kurulumu şu isteği alır:

$shared_secret = 'foobar';
$timestamp = esc_attr($_GET['timestamp']);

if((time() - $timestamp) > 30) # Threshold is 30 seconds
    //do something here - TOKEN expired!

$token = md5($share_secret.$timestamp);
$token_to_check = esc_attr($_GET);

if($token == $token_to_check)
    //authenticated!

Üçüncü taraf yazılım parçasının WP ile bir ilgisi olmadığından oldukça emin olun, bu yüzden aslında tek oturum açma, ancak WP kimlik doğrulama sağlayıcısı olarak işlev görüyor.
anu

@anu: Doğru.
emersonthis

@Brian: Çok tesisli bir kuruluma geçme fikriyle ilgileniyorum, ancak çerezler hakkında konuştuğunuz noktayı tam olarak anlamıyorum. Gerçekleşmesi gereken tek şey, 3. taraf yazılımın, kullanıcının aslında benim kullanıcılardan biri olduğunu doğrulamasıdır. Yazılım aksi takdirde kendi kendine yeterlidir ve kendi çerezlerini veya her şeyi sağlayabilir.
emersonthis

@Emerson Şimdi görüyorum. Karışıklık için özür dilerim. Oluşturduğum uç nokta fikrini kullanabilir ve kimlik doğrulama için kullanıcı metasında paylaşılan jeton kullanabilirsiniz. Kullanıcı varsa 3. tarafa bir JSON yanıtı döndürün.
Brian Fegter

1
Çok güzel bir çözüm. Uygulamalar farklı sunuculara kurulursa ve bir nedenden dolayı her makinenin zamanı farklı olabilir. Bunun counteryerine kullanmayı time()ve isteği iletmenizi öneririm . Her iki taraf da son sayacı geçer ve api yeni sayaçla bir istek aldığında, yenisinin sonuncusundan daha büyük olduğunu doğrular. Bu şekilde bir gecikme herhangi bir zarar veremez.
guyaloni
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.