OpenId Provider

Ярослав

Новичок
OpenId Provider

Здравствуйте.

Сейчас работаю над созданием openid провайдера на базе Zend Framework.
И возник вопрос по поводу в каком виде сохранять идентификатор пользователя.
Если взять код из зенда, то:
PHP:
     /**
      * Registers a new user with given $id and $password
      * Returns true in case of success and false if user with given $id already
      * exists
      *
      * @param string $id user identity URL
      * @param string $password encoded user password
      * @return bool
      */
     public function register($id, $password)
     {
         if (!Zend_OpenId::normalize($id) || empty($id)) {
             return false;
         }
         return $this->_storage->addUser($id, md5($id.$password));
     }
А в функции Zend_OpenId::normalize() есть код
PHP:
          if (strpos($id, "://") === false) {
             $id = 'http://' . $id;
         }
И если я хочу сохранить только имя у меня все равно получаеться http://username/ и тогда несовпадает при проверке.
На данный момент сервер находиться по адресу:
http://site.com/server.php?openid=username
в таком виде храниться логин и все работает.
Но как по мне это немного глупо дублировать "http://site.com/server.php?openid="
Ведь для всех имен это будет одинаковым.
Почему именно так задумали разработчики зенда и как это делаеться правильно?
Спасибо.

-~{}~ 11.03.10 17:55:

Неужели никто не сталкивался о_О
 

crocodile2u

http://vbolshov.org.ru
Ярослав
Тебе надо почитать про openID побольше. Если бы ты это сделал, то знал бы, что openID уникален и именно поэтому в качестве идентификатора используется URL.

Вот давай посмотрим. Есть два провайдера OpenID - oid1 и oid2. В обоих есть пользователь pupkin. Так вот - pupkin.oid1 и pupkin.oid2 - разные люди и разные пользователи. Таким образом, совершенно необходимо, чтобы имя хоста входило в идентификатор.

С помощью OpenID пользователь может авторизоваться на любых ресурсах в интернет, которые поддерживают OpenID, так что просто имени пользователя будет недостаточно.

Другой вопрос, что если тебе нужно просто механизм авторизации на твоем проекте - совсем необязательно для этого заводить openID-сервер, и ты можешь ограничиться только лишь username'ом для однозначной идентификации пользователя.
 

Ярослав

Новичок
Вот давай посмотрим. Есть два провайдера OpenID - oid1 и oid2. В обоих есть пользователь pupkin. Так вот - pupkin.oid1 и pupkin.oid2 - разные люди и разные пользователи. Таким образом, совершенно необходимо, чтобы имя хоста входило в идентификатор.
Я это понял.
Но в пределах одного провайдера pupkin уникален.
Поэтому я не вижу смысла в одном провайдере хранить информацию в виде

Код:
login                                                             | password
http://site.com/server.php?openid=pupkin  | 123 
http://site.com/server.php?openid=ivanov  | 321
если тебе нужно просто механизм авторизации на твоем проекте - совсем необязательно для этого заводить openID-сервер
OpenId мне нужен чтобы пользователь мог работать с одной учетной записью в разных проэктах.
 

crocodile2u

http://vbolshov.org.ru
Ярослав

Хм. Думаю, что, используя ЗФ, реализовать то, что нужно, будет затруднительно и чревато костылями. Кстати, похоже, я не до конца разобрался сначала в проблеме.

Что ж, думаю, можно чего-то добиться, если создать свой storage, который будет выкусывать общую часть при добавлении пользователя... Но, впрочем, остается нехорошая часть в виде md5($id.$password): здесь $id - это полный УРЛ.

Можно было бы создать свой Provider, унаследовав его от зендовского, но, судя по всему, он не шибко поддается расширению: свойства _storage, _user etc объявлены private и методов доступа к ним нет :( (или у меня старая версия ЗФ).
 
Сверху