Yahoo! PlaceFinder подходящий вариант использования для OAuth?
<context>
Вчера я расстроился и опубликовал пламенный вопрос, который был быстро (и соответственно) закрыт и удален моими коллегами из SO. Yahoo! отключил стандартную конечную точку API PlaceFinder и заменил ее платной службой. Это не то, что расстраивало меня, это был факт, что они изменили свою модель доступа, требуя OAuth. Один из близких по моему вопросу прокомментировал что-то по поводу:
вы не следили за устареванием API, от которого зависите, OAuth лучше для пользователей, смиритесь с этим.
Хотя я мог бы утверждать факты своего наблюдения за API, снова обвиняя Yahoo в том, что она сломала ссылки, когда они впервые объявили об устаревании API еще в октябре / ноябре прошлого года, я думаю, что было бы более продуктивно попытаться превратить это в интеллектуальное вопрос. </context>
Я использовал OAuth. Мне нравится OAuth. Он не только позволяет аутентифицировать пользователей и упрощать вход в приложение, но и запрашивать авторизацию для доступа к данным этого пользователя из других приложений. Но данные PlaceFinder не являются частными данными пользователя. Это для известных географических названий и глобальных идентификаторов (идентификаторов WOE), которые могут быть использованы всеми.
Этим утром я дал Yahoo! BOSS GEO информацию о моей кредитной карте и начал набирать OAuth API потребителя, чтобы проверить это. Я начал с DotNetOpenAuth, который я использовал в прошлом. Я прочитал руководство OAuth от Yahoo! И создал DotNetOpenAuth.OAuth.ServiceProviderDescription
экземпляр со всеми URL OAuth 6.1, 6.2 и 6.3 конечной точки Yahoo!. Затем я попытался выяснить, как использовать DotNetOpenAuth.OAuth.WebConsumer
поразить API PlaceFinder и начать давать деньги Yahoo!.
Но это не сработало. Мне пришлось преодолеть много когнитивного диссонанса и, в конце концов, либо ограничение самой популярной и широко используемой библиотеки DotNetOpenAuth, либо возможное неправильное использование OAuth. Когда я наконец понял, что документация BOSS отделена от документации BOSS GEO, и обнаружил пример кода C#, который работал с API PlaceFinder от Yahoo!, я обнаружил, откуда взялся весь этот диссонанс.
API PlaceFinder от Yahoo!, Хотя он использует OAuth, не требует токена доступа для доступа к конечным точкам API или данным. Когда вы отправляете запрос PlaceFinder, вы отправляете всю информацию вашего приложения (ключ потребителя и секрет), а также метку времени, одноразовый номер и подпись в саму конечную точку PlaceFinder. Когда в прошлом я использовал OAuth, эти элементы были отправлены в конечную точку 6.1 для получения токена запроса. Затем вы можете использовать это для аутентификации / авторизации пользователя (6.2) и получения токена доступа (6.3) для выполнения дальнейших запросов.
Вот ограничение в DotNetOpenAuth, которое я пока не могу преодолеть, поэтому, если я неосведомлен и делаю это неправильно, пожалуйста, сообщите мне. В примере кода C# на сайте Yahoo! Они не используют DotNetOpenAuth. Вместо этого у них есть OAuthBase
класс, который вы можете использовать для создания одноразового номера, отметки времени и подписи. Но они посылают пустые строки для токена доступа и секрета. Я попытался сделать это с DotNetOpenAuth, но он не позволит вам создавать какие-либо запросы с нулевым или пустым токеном доступа.
Итак, вопрос: является ли это неправильным использованием стандарта OAuth? Если нет, есть ли ограничение в библиотеке DotNetOpenAuth, которое делает невозможным отправку неавторизованных запросов на конечные точки, отличные от RequestToken (6.1)? Если ответ на оба эти вопроса - нет, как вы могли бы использовать DotNetOpenAuth для запроса данных PlaceFinder без отправки токена доступа или секрета?
2 ответа
Есть два типа oAth, которые использует Yahoo. Один требует ключ, другой нет. Вы, вероятно, хотите тот, который не для общего использования API. Просто добавьте безопасный протокол http:// -> https:// и затем поместите /public/ в соответствующее место старого URL-адреса, например
https://somePartOfURL/public/otherPartOfURL
Это большой вопрос. Я думаю, что oAuth предоставляет разработчикам BOSS два преимущества
Поскольку вы регистрируетесь в BOSS один раз, а затем можете использовать этот ключ для нескольких услуг, команда BOSS хотела иметь возможность предлагать больше услуг, для которых в будущем потребуются токены. Начиная с oAuth с самого начала, вы получили такую гибкость.
Команда хотела убедиться, что ключи не выискиваются во время сетевого взаимодействия. Поскольку запросы подписаны, а фактические ключи не переданы, мы можем гарантировать, что сниффинг не произойдет.
Что касается вашего вопроса о DotNetOpenAuth, я рекомендую спросить о BOSS Y! group ( http://tech.groups.yahoo.com/group/ysearchboss/), поскольку у нас есть несколько человек, написавших на C#, VB.Net, которые могут дать вам совет. На самом деле хорошо известно, что в библиотеке oAuth VB.Net ( http://oauth.googlecode.com/svn/code/vbnet/oAuth.vb) есть некоторые проблемы.