Этот сайт не наркоманов. Это сайт программистов.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 24 Май, 2012, 05:51:00

Страниц: [1] 2
Печать
Автор Тема: XML-RPC / SOAP. Общая авторизация для поддоменов одного проекта.  (Прочитано 3728 раз)
0 Пользователей и 1 Гость смотрят эту тему.
md5    ↓ 
14 Декабрь, 2007, 12:56:31
НЕ ХУЕТА! ХУЕТА!

выезд, апартаменты, массаж, стриптиз, подружки, дорого
Группа: в ухо

Карма: не нужна
Сообщений: 10495
Сила слова: 1.19

Для создения системы общей авторизации для всех проектов Вашего портала (на разных поддоменах) можно использовать так называемый пасспорт.
 
Схема такова:
 
Есть поддомен passport.domain.ru, где установлен сервер авторизации.
 
Заходя на любой из наших проектов и авторизуясь, запрос с логином и паролем уходит в "паспорт", возвращяется результат авторизации и пользователю ставится кука на всю доменную зону (.domain.ru) + сессионная переменная обозначающая, что наш пользователь уже авторизовался и имеет доступ к нашему проекту.
 
В куку ставится так называемый "token", по которому можно авторизовать клиента, пришедшего на проект через некоторое время, когда сеанс был завершен.
 
Таким образом у авторизационного сервера есть 2 процедуры:

  • Авторизация по логину и паролю (auth_by_login)

  • Авторизация по "token" (auth_by_token)


Эти процедуры вызываются при помощи технологий XML-RPC или SOAP (Simple Object Access Protocol).
Remote Procedure Call — протокол удаленного вызова процедур.
 
Идея заключается в формировании XML посылки, которая содержит в себе название вызываемой процедуры, необходимые параметры и направляется серверу.
От сервера приходит ответ в таком же формате.
 
Для работы с SOAP в php есть расширение, php_soap.
 
Использовать его крайне просто, мозг вобще не напрягается.
 
Пример использования:
 
PHP
// Задаем URL сервера авторизации
$client = new SoapClient("http://passport.domain.ru/wsdl");
 
/*
** Добавляем параметры, необходимые для авторизации
** Здесь пример использования авторизации по логину и паролю
** Передаём в аргументах login, password, IP пользователя (опционально) и название текущего проекта (опционально)
** Название проекта, допустим, photos.domain.ru (фотогалереи пользователей)
*/

 
$args = array ("login"=>$login, "password"=>$password, "ip"=>$_SERVER['REMOTE_ADDR'], "project"=>"photos");
 
/*
** Вызываем метод "auth_by_login", передавая ему массив параметров
** и в переменную $response мы получаем ответ сервера
*/

 
$response = $client->__soapCall("auth_by_login", $args);
 

На выходе переменная $response является объектом.
Для тех, кто работе с объектами предпочетает работу с массивами можно сделать функцию перевода в массив, вроде этой:
 
PHP
function obj2array($obj) {
    $array = array();
    foreach ($obj as $key => $val) {
        switch(true) {
            case is_object($val):
            case is_array($val):
                $array[$key] = obj2array($val);
            break;
            default:
                $array[$key] = $val;
            break;
        }
    }
    return $array;
}
 

Переведём в массив и выведем:
 
PHP
$response = obj2array($response);
print '<pre>';
print_r($response);
print '</pre>';
 

 
Как видим, все красиво и просто.
 

Как выглядит исходное сообщение?
 
HTML

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
     <auth_by_login xmlns="http://passport.domain.ru/wsdl/">
       <login>login</login>
       <password>password</password>
       <ip>127.0.0.1</ip>
       <project>photos</project>
     </auth_by_login>
   </soap:Body>
 </soap:Envelope>
 

Пример ответа:
 
HTML

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
     <auth_by_loginResponse xmlns="http://passport.domain.ru/wsdl/">
       <auth_by_loginResult>
         <id>123</id>
         <username>Имя пользователя</username>
         <role>0</role>
       </auth_by_loginResult>
     </auth_by_loginResponse>
   </soap:Body>
 </soap:Envelope>
 

 
Спецификация SOAP
Подробное описание технологии
 

Необходимо также помнить о кешировании результатов.
В php.ini есть секция [soap]
 

[soap]
 
soap.wsdl_cache_enabled = "1"
; включает или выключает WSDL кеширование
 
soap.wsdl_cache_dir = "/tmp"
; указание директории, где будут храниться временные файлы
 
soap.wsdl_cache_ttl = "86400"
; время в секундах, в течении которого будет храниться кешированный файл

 
Для использование технологии XML-RPC существует достаточное количество классов, которые несомненно упрощают работу.
 
Подробнее о XML-RPC и о примере использования классов для работы с ним — http://phpclub.ru/detail/article/xmlrpc
Спецификация XML-RPC
« Последнее редактирование: 14 Апрель, 2008, 04:49:05 от md5 » Записан

8: Undefined variable: str
Файл: /home/pyha/pyha.ru/forum/bbcode/Xbb/Tags/Man.php
Строка: 18
adw0rd: мудень блять, я уже фиксить стал эту фигню :)
md5: вуахахахаха
vasa_c    ↓ 
15 Декабрь, 2007, 12:10:02 , спустя 23 часа 13 минут 31 секунду
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 81
Сообщений: 2459
Сила слова: 3.29

Где серверная часть? Она самая интересная.
 
Я бы не стал гонять объекты между процессами, тем более что это в данном случае не дает никаких преимуществ перед массивами.
С теоретической точки зрения — массивы больше подходят под определения "данные", которые следует передавать. В то время, как объект, это структурная единица определенной программы.
С практической — нужно быть точно уверенным, что определение класса данного объекта будет одно и доступно как на сервере и на клиенте в нужное время. Даже в рамках одного сценария при передаче через сессии постоянно с этим бывают глюки. Что уж говорить при передаче между двумя серверами, где и пых может быть разный и требуется держать две копии описания.
Записан

artoodetoo    ↓ 
13 Март, 2009, 02:31:16 , спустя 454 дня 2 часа 21 минуту 14 секунд
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

Из примера непонятно преимущество расширения php_soap по сравнению с посылкой POST того же содержания через, например, php_curl. Не всё ли равно как выглядят данные на транспортном уровне?
 
Наверное я чего-то не понял.
Записан
Убийца    ↓ 
13 Март, 2009, 04:11:37 , спустя 1 час 40 минут 21 секунду
НЕ ХУЕТА! ХУЕТА!

адский парень
Группа: Жмурики

Карма: 7
Сообщений: 530
Сила слова: 1.32


Из примера непонятно преимущество расширения php_soap по сравнению с посылкой POST того же содержания через, например, php_curl. Не всё ли равно как выглядят данные на транспортном уровне?
 
Наверное я чего-то не понял.
а именно, 2 вещей:
*ты на базовом курле не напишешь это в 3 строчки
*данные выглядят по разному уже на уровне приложений (см. http://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_OSI)
Записан
phpdude    ↓ 
13 Март, 2009, 04:21:50 , спустя 10 минут 13 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: д-о-х-у-я!
Сила слова: 1.66

ubica, выйди из тени в аську! сцуко, хватит прятатсо)))))
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Убийца    ↓ 
13 Март, 2009, 04:28:43 , спустя 6 минут 53 секунды
НЕ ХУЕТА! ХУЕТА!

адский парень
Группа: Жмурики

Карма: 7
Сообщений: 530
Сила слова: 1.32

только встал.. щас, пожрав, приду на работу и выйду)
Записан
phpdude    ↓ 
13 Март, 2009, 04:49:28 , спустя 20 минут 45 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: 20784
Сила слова: 1.66

ubica, ТЫ ПОЛНЫЙ ПИЗДЕЦ! ))))))))))))))))))))) 7 часов вечера, а ты проснулся :-D
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Z-MODe    ↓ 
02 Март, 2010, 02:57:03 , спустя 353 дня 22 часа 7 минут 35 секунд
НЕ ХУЕТА! ХУЕТА!


Карма: 1
Сообщений: 201
Сила слова: 0.5

Вопрос. А на сервере нужен WSDL, чтобы принимать такие запросы? Просто есть документация общения с одним сервисом, но ссылок на wsdl нету( и выходит ошибка, есть только название функции и адресс.
Text
Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't find <definitions> in
Записан

Некоторые программисты на столько суровы, что сохраняют логи аськи на баше...
Z-MODe    ↓ 
02 Март, 2010, 05:29:21 , спустя 2 часа 32 минуты 18 секунд
НЕ ХУЕТА! ХУЕТА!


Карма: 1
Сообщений: 201
Сила слова: 0.5

Вроде разобрался..
WSDL эту использую http://schemas.xmlsoap.org/soap/envelope/
 
А можно как нибудь узнать, что у тебя сформировалось?
Записан

Некоторые программисты на столько суровы, что сохраняют логи аськи на баше...
Абырвалг    ↓ 
02 Март, 2010, 06:03:52 , спустя 34 минуты 31 секунду
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6094
Сила слова: 1.31

я не знаю почему, но меня от SOAP тянет в тоску. Хоть не разу с ним и не работал.
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
phpdude    ↓ 
02 Март, 2010, 06:09:22 , спустя 5 минут 30 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: 20784
Сила слова: 1.66


я не знаю почему, но меня от SOAP тянет в тоску. Хоть не разу с ним и не работал.
а что не тянет?
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Абырвалг    ↓ 
02 Март, 2010, 06:12:31 , спустя 3 минуты 9 секунд
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6094
Сила слова: 1.31

сиськи, бухло
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
AlexB    ↓ 
02 Март, 2010, 06:38:09 , спустя 25 минут 38 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3424
Сила слова: 2.6

письки, трава
Записан

adw0rd    ↓ 
02 Март, 2010, 06:41:57 , спустя 3 минуты 48 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17615
Сила слова: 1.67


я не знаю почему, но меня от SOAP тянет в тоску. Хоть не разу с ним и не работал.
потому что XML
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
Абырвалг    ↓ 
02 Март, 2010, 08:49:40 , спустя 2 часа 7 минут 43 секунды
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6094
Сила слова: 1.31

Эдво сработал как психолог. Я и сам раньше не понимал почему SOAP вгонял меня в тоску. Теперь я понял, в чем корень моей проблемы))
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
Страниц: [1] 2
Печать
 

Перейти в:  

Этот топик скрыли: Sinkler