У меня есть продукт с простым REST API, поэтому пользователи продукта могут напрямую интегрироваться с функциями продукта без использования моего пользовательского веб-интерфейса.
Недавно меня заинтересовали различные третьи стороны по поводу интеграции их настольных клиентов с API, чтобы пользователи моего продукта могли получать доступ к своим данным с помощью этого стороннего приложения.
Я видел, что приложения, которые хотят использовать Twitter для аутентификации, используют страницу входа в Twitter, которая предоставляет конкретному приложению разрешение на доступ к данным этого пользователя. Вы нажимаете кнопку «Разрешить» или «Запретить», и процесс аутентификации завершается. Facebook использует тот же механизм, насколько я могу судить.
После дальнейшего исследования, похоже, что это OAuth в действии, и, поскольку мой API основан на .Net, я думаю, что должен использовать DotNetOpenAuth и предоставить аналогичный механизм. К сожалению, образцы плохо документированы (если вообще документированы), и единственные учебные пособия, которые я могу найти в Интернете, похоже, сосредоточены на том, чтобы помочь вам предоставить механизм входа в систему для ваших пользователей, чтобы они могли войти на ваш сайт с помощью стороннего поставщика.
Я бы действительно хотел, чтобы мой REST API обрабатывал всю базовую аутентификацию и бизнес-логику для моего веб-приложения, а мое веб-приложение, по сути, было другим приложением, которое просто использует API через OAuth. Пользователи будут аутентифицироваться на веб-сайте либо напрямую, используя свое имя пользователя и пароль, либо через стороннего поставщика, такого как MyOpenID или Facebook, а затем веб-сайт каким-то образом будет использовать возвращенный токен для аутентификации с помощью REST API.
По сути, похоже, что мне нужен мой API для того, чтобы каким-то образом разместить службу OAuth, но пользователи также используют стороннюю службу OAuth. Я ничего не могу поделать, но думаю, что у меня недостаточно знаний о OAuth, чтобы решить, слишком ли я усложняю что-то или то, что я пытаюсь сделать, является хорошим или плохим способом сделать что-то.
Может ли кто-нибудь дать мне хотя бы общий обзор шагов, которые мне нужно предпринять, или на что мне следует обратить внимание, чтобы это произошло? Или указать мне на какие-нибудь уроки? Или взорвать мое предложение и сказать, что я все (архитектурно) ошибаюсь?