Защита моего REST API с помощью OAuth при одновременном разрешении аутентификации через стороннюю Поставщики OAuth (с использованием DotNetOpenAuth)

У меня есть продукт с простым REST API, так что пользователи продукта могут напрямую интегрироваться с функциями продукта без использования моего пользовательского веб-интерфейса.

Недавно меня заинтересовали различные третьи стороны об интеграции своих настольных клиентов с API, чтобы пользователи моего продукта могли получать доступ к своим данным с помощью этого стороннего приложения.

I ' Мы видели, что приложения, которые хотят использовать Twitter, аутентифицируются с помощью страницы входа в Twitter, которая предоставляет конкретному приложению разрешение на доступ к данным этого пользователя. Вы нажимаете кнопку «Разрешить» или «Запретить», и процесс аутентификации завершается. Facebook использует тот же механизм, насколько я могу судить.

По результатам дальнейших исследований, похоже, что это OAuth в действии, и, поскольку мой API основан на .Net, я думаю, что мне следует использовать DotNetOpenAuth и предоставить аналогичный механизм. К сожалению, образцы плохо документированы (если вообще документированы), и единственные учебные пособия, которые я могу найти в Интернете, похоже, сосредоточены на том, чтобы помочь вам предоставить механизм входа в систему для ваших пользователей, чтобы они могли войти на ваш сайт с помощью стороннего поставщика.

Я бы действительно хотел, чтобы мой REST API обрабатывал всю базовую аутентификацию и бизнес-логику для моего веб-приложения, а мое веб-приложение, по сути, было бы другим приложением, которое просто использует API через OAuth. Пользователи будут аутентифицироваться на веб-сайте либо напрямую, используя свое имя пользователя и пароль, либо через стороннего поставщика, такого как MyOpenID или Facebook, а затем веб-сайт каким-то образом будет использовать возвращенный токен для аутентификации с помощью REST API.

Architectural Diagram

По сути, похоже, что я мне нужен мой API для размещения службы OAuth, но также чтобы пользователи использовали стороннюю службу OAuth. Я не могу помочь, но думаю, что у меня недостаточно знаний о OAuth, чтобы решить, слишком ли я усложняю вещи или то, что я пытаюсь сделать, является хорошим или плохим способом сделать что-то.

Может ли кто-нибудь дать мне хотя бы общий обзор шагов, которые мне нужно предпринять, или на что мне следует обратить внимание, чтобы это произошло? Или указать мне на какие-нибудь уроки? Или взорвать мое предложение и сказать, что я ошибаюсь (с архитектурной точки зрения)?

138
задан Nathan Ridley 1 January 2011 в 17:17
поделиться