Study - dev, blog archive, openid

OpenID. Як я впроваджував підтримку OpenID. хроніки

А кількість разів, коли я сам особисто проходив реєстрацію, що вимагає підтвердження по email можна перелічити на пальцях однієї руки: мені не шкода світити свій ящик для "спам-пошти" - просто лінь.

Де дістати openid-провайдер?

Я ж далі покажу, як встановити openid-провайдер на власному хостингу.

Study - dev, blog archive, openid

В отриманому файлі

Я додав рядок, що включає до змінної include_path (де шукати затребуваних для підключення бібліотек) шлях до кореня установки openid (використовував відносний шлях). Потім зберіг файл під ім'ям config.php в каталозі разом з server.php.

Потім відкриваю http. //center:89/openid/examples/server/server.php і милуюся на свіжовстановленому і навіть робочий openid-сервер (по крайней мере, коли я натиснув на кнопку "login", ввів придумане ім'я користувача, то нічого не "поламалося" , а у верхній частині сторінки відобразилася напис, на кшталт, "ласкаво просимо, Вася").

Study - dev, blog archive, openid

Відкрив подивитися вихідний код html для персональної сторінки. Як і очікувалося там знайшлася діректіріва:

Потім я вирішив подивитися, як виглядає база даних, які в ній з'явилися таблички і що де зберігається. Виявилося, щоб бази даних немає. Тобто вказане при конфігуруванні значення ніде не використовується. Довелося створити базу руками (і трохи потурбуватися, яка потрібна кодування для роботи цього чуда?).

Повторний запуск сервера привів до створення двох таблиць з іменами oid_associations і oid_nonces. Ось їх код:

Також я зацікавився тим, де можна налаштувати їх імена (наприклад, поміняти префікс імені таблиці). У пошуках цього місця я відкрив файл "openid \ Auth \ OpenID \ MySQLStore.php" і побачив нехитрий код DDL для цих двох таблиць (кодування вони успадковують від кодування бази даних, і ніякого коду вибору кодування підключення я не знайшов). Цікаво, що буде, коли база в utf8, а кодування підключення за замовчуванням в cp1251 (як у мене на хостингу).

OpenID # 038; Mediawiki

Це повноцінний приклад openid-сервера (який інтегрований з "рідної" для mediawiki системою реєстрації), так що тепер на персональній сторінці користувача буде поміщений той самий html-код openid-провайдера.

Почав я з того, що створив в базі (база для mediawiki, про стару базу з прикладом простенького сервера забудьте) нову таблицю (замініть $ wgDBprefix на використовуваний вами префікс mediawiki)

Після чого скопіював в папку extensions каталог з кодом розширення і вказав у файлі LocalSettings.php шлях до файлу OpenID.php

Для коректно роботи розширення йому потрібна бібліотекa openid (вона не йде в поставці з самим розширенням). На щастя, ці бібліотеки були використані в минулих прикладах, так що мені потрібно було тільки підключити їх до include_path. Так що в файлі LocalSettings.php перед рядком завантажування розширення "extensions / OpenID / OpenID.php" була додана рядок, із зазначенням того, де можна знайти файли бібліотеки openid:

Тепер я відкриваю головну сторінку mediawiki і бачу зміни. Вгорі сторінки з'явилася кнопка "Login with OpenID", а в списку спеціальних сторінок додалася нова сторінка, що містить форму аутентифікації за допомогою openid (Special: OpenIDLogin). Зайшовши на свою персональну сторінку, в коді html бачу посилання на провайдера openid-послуг.

Study - dev, blog archive, openid

Спробуємо увійти в mediawik-у за допомогою openid-імені. Тисну на кнопку "Login with OpenID", потім потрапляю на наступну форму:

Study - dev, blog archive, openid

Study - dev, blog archive, openid

Гаразд, раз у мене на test-машині windows, то доведеться виправити в цьому файлі значення змінної на null. Відкриваю файл Auth / OpenID / CryptUtil.php, знаходжу в ньому наступний фрагмент і встановлюю значення змінної Auth_OpenID_RAND_SOURCE рівній null.

Повторно пробую пройти процедуру аутентифікації після виправлення помилки і отримую:

Study - dev, blog archive, openid

Все, як і повинно бути. Форма підтвердження аутентифікації і запит на те, чи хочу я довіряти сайту, запити послугу openid-аутентифікації. Правда, настрій зіпсувала з'явилася невідомо звідки в корені диска (того, де знаходиться веб-каталог) папка tmp. Всередині, якої виявилося безліч файлів, створених openid розширенням до mediawiki. Доведеться ще раз пройтися по налаштуванню openid-розширення і вказати для цих (безумовно, потрібних для роботи) файлів інше місце розташування.

Як я писав вище, розширення для роботи з openid має два призначення: ви можете входити на mediawiki-сайт за допомогою openid-облікових даних наданих деяким openid-провайдером; або ваша персональна сторінка на wiki буде використана для входу на інші сервера. Простіше кажучи, це розширення відіграє роль і клієнта openid і сервера openid. Для роботи кожного з них потрібно налаштувати місце, де будуть зберігатися "якісь важливі дані". Почну з клієнтської частини. В принципі, є всього два варіанти: або файлова система, або memcached-сервер. На цільовому хостингу в internet memcached-му навіть і не пахло - доведеться обійтися файлами для зберігання. Замітка на майбутнє: чому процедура аутентифікації так гальмує (apache з'їв весь процесор і не на одну секунду).

Додаю в файл LocalSettings.php наступні змінні:

Після чого отримав чергове повідомлення про помилку:

Після нетривалої медитації виявилося, що я поставив зайвий пробіл в імені каталогу. Так що, після виправлення openid-аутентифікація заробила, і зайві папки в корені диска не створювалися. Мораль: вказуйте шляху до файлового сховища правильно. Автоматично вони не створюються (по крайней мере, тоді, коли потрібно).

Заробити, то запрацювало, тільки після позитивної відповіді на "довіряю я цьому сайту?", Знову з'явилося повідомлення про ошібке.І на цей раз більш цікаве:

Study - dev, blog archive, openid

Виявилося, що відповідь openid-провайдера не збігається з тим, що очікував Consumer на стороні mediawiki. Заради інтересу я вивів на екран, що ж там повернулося від сервера.

Study - dev, blog archive, openid

Ага, повертається масив з купою інформації, а клієнт хоче отримати всього лише один рядок (цікаво, з чим?). Довелося зайнятися читанням документації і де і знайшлася фатальна фраза:

Наступного разу я розкажу про те, як створити клієнт (Consumer) послуг openid-аутентифікації. Адже мені потрібно інтегрувати форму логіна в flash-клієнт навчальної машини. Напишу як тільки розберуся з цим процесом.

Схожі статті