Обнаружение открытых идентификаторов XRDS
Вопрос
Я работаю с Open Id, просто играюсь с созданием класса для взаимодействия / аутентификации открытых идентификаторов на моем сайте (на PHP).Я знаю, что есть несколько других библиотек (например, RPX), но я хочу использовать свою собственную (это полезно для того, чтобы помочь лучше понять протокол и подходит ли он мне).
Вопрос, который у меня возник, относится к последовательности обнаружения открытого идентификатора.В принципе, я достиг точки, когда я рассматриваю возможность использования документа XRDS для получения локального идентификатора (OpenID.identity) из заявленного идентификатора (OpenID.claimed_id).
Мой вопрос в том, должен ли я сделать запрос cURL, чтобы получить местоположение XRDS (X-XRDS-location), а затем сделать другой запрос cURL, чтобы получить фактический документ XRDS??
Похоже, что с помощью НЕМОГО запроса я делаю только один запрос cURL и получаю сервер Open Id, но должен сделать два, чтобы использовать интеллектуальный метод XRDS.Просто это кажется неправильным, может кто-нибудь еще дать мне немного информации.
Решение
Для полноты, да, ваш RP должен получить HTTP по URL, который вам дает пользователь, а затем выполнить поиск ссылки на документ XRDS и, если найден, выполнить другой HTTP GET оттуда.Имейте в виду, что XRDS могут быть размещены на другом сервере, поэтому не кодируйте ничего, что потребовало бы, чтобы соединение было одинаковым между двумя запросами, поскольку это может быть не одно и то же соединение.
Если в вашем первоначальном запросе HTTP GET вы включаете HTTP-заголовок:
Accept: application/xrds+xml
Тогда страница МОЖЕТ немедленно ответить документом XRDS, а не HTML-документом, который вам нужно проанализировать для ссылки XRDS.Вы сможете определить, что это произошло, проверив заголовок HTTP-ответа для application / xrds + xml в его заголовке Content-Type.Это оптимизация, так что RPS обычно не приходится выполнять этот второй HTTP GET-вызов - но вы не можете полагаться на то, что это произойдет.
Другие советы
Лучший совет, который я могу вам дать, - попытаться немного абстрагироваться от вашего HTTP-запроса, а затем просто дважды повторить весь процесс выполнения HTTP-запроса.
Вы можете сохранить свои экземпляры curl, если хотите ускорить работу с помощью постоянных подключений, но это может быть вашим желанием, а может и не быть.
Я надеюсь, что это поможет, и желаю удачи..OpenID - один из самых громоздких и запутанных веб-стандартов, с которыми я сталкивался со времен WebDAV =)
Выворачивать
Я знаю, что опаздываю на игру здесь, но я думаю, вам также следует проверить протокол webfinger.Он использует стандартный шаблон "электронная почта как идентификатор пользователя" и позволяет вам выполнять поиск оттуда, чтобы обнаружить OpenID и т.д.