Eu tenho um produto com uma API REST direta para que os usuários do produto possam se integrar diretamente aos recursos do produto sem usar minha interface com o usuário da web.
Recentemente, tenho recebido interesse de vários terceiros sobre a integração de seus clientes de desktop com a API para permitir que os usuários do meu produto acessem seus dados usando esse aplicativo de terceiros.
Vi que os aplicativos que desejam usar o Twitter se autenticam usando uma página de login hospedada pelo Twitter que concede permissão a um aplicativo específico para acessar os dados desse usuário. Você clica no botão "Permitir" ou "Negar" e o processo de autenticação está concluído. O Facebook usa o mesmo mecanismo que eu posso dizer.
Após uma pesquisa mais aprofundada, parece que o OAuth está em ação e, como minha API é baseada em .Net, acho que devo usar o DotNetOpenAuth e fornecer um mecanismo semelhante. Infelizmente, os exemplos são escassamente documentados (se houver) e os únicos tutoriais que posso encontrar on-line parecem focados em ajudá-lo a fornecer um mecanismo de login para seus usuários, para que possam fazer login no seu site usando um provedor de terceiros.
O que eu realmente gostaria de fazer é que minha API REST lide com toda a autenticação principal e lógica de negócios do meu aplicativo Web e tenha, sob o capô, meu aplicativo Web essencialmente outro aplicativo que apenas usa a API via OAuth. Os usuários se autenticariam no site usando diretamente seu nome de usuário e senha ou através de um provedor terceirizado como MyOpenID ou Facebook e, em seguida, o site usaria de alguma forma o token retornado para se autenticar na API REST.
Basicamente, parece que eu preciso da minha API para hospedar um serviço OAuth, mas também os usuários usam um serviço OAuth de terceiros. Não posso deixar de pensar que não tenho o suficiente conhecimento do OAuth para decidir se estou complicando demais as coisas ou se o que estou tentando fazer é uma maneira boa ou ruim de fazer as coisas.
Alguém pode me dar pelo menos uma ampla visão geral das etapas que preciso executar ou o que devo considerar para que isso aconteça? Ou me aponte para alguns tutoriais? Ou exploda a minha proposta e diga que estou errado (arquitetonicamente) sobre isso?