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