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