Створіть API для одноразового входу на сторонній сайт


13

Мій сайт повинен інтегруватися із стороннім програмним забезпеченням, яке буде працювати на власному піддомені, розміщеному програмною компанією. Мені потрібно надати стороннім розробникам кінцеву точку, яку вони можуть використовувати для здійснення дзвінків API (на мій сайт Wordpress), щоб дозволити користувачам мого сайту отримати доступ до субдомену.

Інший сайт повинен аутентифікувати користувачів з мого сайту через якийсь API.

Я не впевнений, з чого почати, але я відчуваю, що це зрозуміли люди розумніші за мене. Спасибі заздалегідь!


1
Який тип дзвінків API знадобиться? Що ти намагаєшся зробити? Ви подивилися підтримку WP XML-RPC ( codex.wordpress.org/XML-RPC_Support )?
ану

Інший сайт повинен перевірити / автентифікувати користувачів з мого WP-сайту.
emersonthis

Відповіді:


16

Проблеми між сценарієм сценаріїв

Ви не можете передавати файли cookie WP для авторів між доменами. Ви також не хочете програмно зберігати паролі простого тексту для входу в іншу інсталяцію WP. Отже, вам доведеться змусити користувачів увійти в WordPress, а потім отримати доступ до їх статусу входу через кінцеву точку API з сторонніх сайтів. Це дозволяє WordPress обробляти всю аутентифікацію. Це досить безпечно, оскільки користувачеві доведеться фізично увійти на сторону WP, щоб кінцева точка API могла подавати дані сторонній стороні.

Створіть кінцеву точку API

Перегляньте цю статтю, яку я написав тут: http://coderrr.com/create-an-api-endpoint-in-wordpress/

Також ви можете побачити демонстрацію коду тут: https://gist.github.com/2982319

Вам доведеться з’ясувати логіку для власних потреб у додатку, але це дозволить створити кінцеву точку, де ви зможете подавати все, що завгодно, зі сторони WordPress.

Оскільки ви використовуєте WordPress як сайт аутентифікації, ви можете використовувати чек, як is_user_logged_in (). Якщо вони ввійшли, поверніть об’єкт користувача третій стороні з будь-якою інформацією, яка їм потрібна.

Вхід із сторонньої сторони

З боку третьої сторони вони можуть зв’язатись із вашою сторінкою входу для отримання безперервного досвіду, використовуючи змінний запит redirect_to. Після входу він поверне їх на сторонній сайт.

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

Віддалені входи

Якщо вам потрібно ввійти користувачів у WordPress із стороннього сайту, ви можете використовувати кілька простих функцій WP, перелічених на цьому веб-сайті: http://kuttler.eu/code/log-in-a-wordpress-user-programmatic/

Вам, безумовно, потрібно використовувати спільну таємницю та створювати хеши, що базуються на часі, щоб захистити речі. В основному, ось як це виглядатиме:

Третя сторона надсилає запит із позначкою часу та маркером, створеними спільною таємницею:

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

Встановлення WordPress отримує запит:

$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!

Досить впевнено, що стороннє програмне забезпечення не має нічого спільного з WP, тому, по суті, це єдина реєстрація, але WP виступає в ролі постачальника аутентифікації.
ану

@anu: Це правильно.
emersonthis

@Brian: Мене зацікавила ідея перейти на інтерактивну установку, але я не повністю розумію точку, яку ви зробили щодо файлів cookie. Все, що має відбутися, - це програмне забезпечення сторонньої сторони, щоб перевірити, чи є його користувач насправді одним із моїх користувачів. Інакше програмне забезпечення є самодостатнім і може надавати власні файли cookie чи будь-що інше.
emersonthis

@Emerson Я бачу зараз. Вибачте за непорозуміння. Ви можете використовувати ідею кінцевої точки, яку я створив, і використовувати спільний маркер у мета користувача для аутентифікації. Поверніть відповідь JSON третій стороні, якщо користувач існує.
Брайан Фегтер

1
Дуже приємне рішення. Може виникнути проблема, якщо програми встановлені на різних серверах, і час роботи кожної машини з певних причин відрізняється. Я б запропонував використовувати counterзамість цього time()і передати його із запитом. Обидві сторони зберігають переданий останній лічильник, і коли api отримує запит з новим лічильником, він перевіряє, що новий більше, ніж останній. Таким чином затримка не може принести ніякої шкоди.
guyaloni
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.