Mam produkt z prostym interfejsem API REST, dzięki czemu użytkownicy produktu mogą bezpośrednio integrować się z funkcjami produktu bez korzystania z mojego internetowego interfejsu użytkownika.
Ostatnio różne strony trzecie interesowały się integracją ich klientów na komputery stacjonarne z interfejsem API, aby umożliwić użytkownikom mojego produktu dostęp do ich danych za pomocą tej aplikacji innej firmy.
Widziałem, że aplikacje, które chcą używać Twittera, uwierzytelniają się za pomocą strony logowania hostowanej przez Twittera, która przyznaje określonej aplikacji uprawnienia dostępu do danych tego użytkownika. Klikasz przycisk „Zezwól” lub „Odmów”, a proces uwierzytelniania jest zakończony. Facebook używa tego samego mechanizmu, co mogę powiedzieć.
Po dalszych badaniach wydaje się, że jest to OAuth w akcji, a ponieważ moje API jest oparte na .Net, myślę, że powinienem użyć DotNetOpenAuth i zapewnić podobny mechanizm. Niestety przykłady są skąpo udokumentowane (jeśli w ogóle), a jedyne samouczki, które mogę znaleźć w Internecie, wydają się skupiać na pomocy w zapewnieniu mechanizmu logowania dla użytkowników, aby mogli zalogować się do Twojej witryny za pomocą dostawcy zewnętrznego.
To, co naprawdę chciałbym zrobić, to aby mój REST API obsługiwał wszystkie podstawowe uwierzytelnianie i logikę biznesową dla mojej aplikacji internetowej, a moja aplikacja internetowa była w zasadzie kolejną aplikacją, która po prostu korzysta z API za pośrednictwem OAuth. Użytkownicy uwierzytelnialiby się na stronie internetowej albo bezpośrednio, używając swojej nazwy użytkownika i hasła, albo za pośrednictwem dostawcy zewnętrznego, takiego jak MyOpenID lub Facebook, a następnie witryna w jakiś sposób użyłaby zwróconego tokenu do uwierzytelnienia w REST API.
Zasadniczo wygląda na to, że potrzebuję mojego interfejsu API, aby w jakiś sposób hostować usługę OAuth, ale także chcę, aby użytkownicy korzystali z usługi OAuth innej firmy. Nie mogę pomóc, ale myślę, że nie mam wystarczającej znajomości protokołu OAuth, aby zdecydować, czy zbytnio komplikuję, czy to, co próbuję zrobić, jest dobrym lub złym sposobem na zrobienie czegoś.
Czy ktoś może mi dać przynajmniej ogólny przegląd kroków, które muszę podjąć, lub na co powinienem zwrócić uwagę, aby to się stało? Albo wskaż mi jakieś samouczki? Albo wysadź moją propozycję i powiedz mi, że robię to (architektonicznie) źle?