Problemy ze skryptami między witrynami
Nie można przenosić plików cookie uwierzytelniania WP między domenami. Nie chcesz również przechowywać haseł w postaci zwykłego tekstu do logowania programowego do innej instalacji WP. Musisz więc zalogować użytkowników do WordPress, a następnie uzyskać dostęp do ich statusu logowania za pośrednictwem punktu końcowego interfejsu API z witryny innej firmy. Dzięki temu WordPress obsługuje wszystkie uwierzytelnienia. Jest dość bezpieczny, ponieważ użytkownik będzie musiał fizycznie zalogować się po stronie WP, aby punkt końcowy interfejsu API mógł udostępnić dane stronie trzeciej.
Utwórz punkt końcowy interfejsu API
Sprawdź ten artykuł, który właśnie napisałem tutaj: http://coderrr.com/create-an-api-endpoint-in-wordpress/
Demonstrację kodu można również zobaczyć tutaj: https://gist.github.com/2982319
Będziesz musiał zrozumieć logikę dla własnych potrzeb aplikacji, ale pozwoli ci to stworzyć punkt końcowy, w którym możesz obsłużyć wszystko, co chcesz od strony WordPress.
Ponieważ używasz WordPress jako strony uwierzytelniającej, możesz użyć czeku takiego jak is_user_logged_in (). Jeśli są zalogowani, zwróć obiekt użytkownika stronie trzeciej, podając wszelkie potrzebne informacje.
Logowanie się od strony trzeciej
Firmy zewnętrzne mogą połączyć się z Twoją stroną logowania, aby zapewnić bezproblemową obsługę za pomocą zapytania redirect_to var. Po zalogowaniu przekaże je z powrotem do witryny innej firmy.
http://sub.yourdomain.com/wp-login.php?redirect_to=http%3A%2F%2Fwww.third-party-domain.com
Zdalne logowanie
Jeśli musisz zalogować użytkowników do WordPress z witryny innej firmy, możesz użyć kilku prostych funkcji WP wymienionych na tej stronie: http://kuttler.eu/code/log-in-a-wordpress-user-programmatically/
Na pewno będziesz musiał użyć wspólnego sekretu i utworzyć hash oparty na czasie, aby zachować bezpieczeństwo. Zasadniczo wygląda to tak:
Firma zewnętrzna wysyła żądanie ze znacznikiem czasu i tokenem wygenerowanym przez wspólny klucz tajny:
$shared_secret = 'foobar'; //do not send this to the API endpoint
$timestamp = time();
$token = md5($shared_secret.$time_stamp);
Instalacja WordPress otrzymuje żądanie:
$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!