Я думал о безопасности для моего веб-сервиса REST API, и решил взглянуть на другие крупные службы и как они это делают. В качестве примера я решил изучить Twitter OAuth. После прочтения руководства для новичков меня немного смущает и шокирует.
Как я понял, ответственность поставщика услуг за аутентификацию пользователя и показать пользователю, какой потребитель доступа требует (например, он хочет доступ только для чтения к определенному ресурсу). Но я видел поставщиков услуг, которые не информируют пользователя о том, какой тип потребителя доступа требует (и даже сейчас показывает потребительскую идентичность). Вторая часть проблемы заключается в том, что потребитель может показать свою собственную настраиваемую форму аутентификации поставщика услуг в IFrame и просто скрыть данные доступа, они могут просто украсть ваш пароль или запросить неограниченный доступ к вашим ресурсам, они могут делать в основном то, что они хотят, есть много способов обмануть пользователя.
В качестве примера возьмем LinkedIn. Они запрашивают ваше имя пользователя и пароль gmail в своей собственной форме, и вы не представляете, как они будут его использовать. Они могут просто украсть его и сохранить в своей БД, они могут использовать OAuth для gmail (и они не показывают страницу Gmail с информацией о том, какой тип доступа они запрашивают), они могут делать все, что захотят, с помощью этой информации.
То, что я пытаюсь сказать, не в том, что протокол OAuth не является безопасным, но, скорее, есть много способов использовать его ненадлежащим образом, чтобы обмануть пользователя и получить его учетные данные.
Кстати, в протоколе OAuth произошел поток безопасности http://oauth.net/advisories/2009-1/), и я уверен, что их больше, но никто не заботится о том, чтобы найти их.