Tengo un producto con una API REST sencilla para que los usuarios del producto puedan integrarse directamente con las características del producto sin usar mi interfaz de usuario web.
Recientemente, he recibido interés de varios terceros sobre la integración de sus clientes de escritorio con la API para permitir a los usuarios de mi producto acceder a sus datos utilizando esa aplicación de terceros.
He visto que las aplicaciones que desean usar Twitter se autentican mediante una página de inicio de sesión alojada por Twitter que otorga permiso a una aplicación específica para acceder a los datos de ese usuario. Hace clic en el botón "Permitir" o "Denegar" y se completa el proceso de autenticación. Facebook usa el mismo mecanismo que mejor puedo decir.
Tras una investigación adicional, esto parece ser OAuth en acción, y dado que mi API está basada en .Net, creo que debería usar DotNetOpenAuth y proporcionar un mecanismo similar. Desafortunadamente, las muestras están escasamente documentadas (si es que las hay) y los únicos tutoriales que puedo encontrar en línea parecen estar enfocados en ayudarlo a proporcionar un mecanismo de inicio de sesión para sus usuarios para que puedan iniciar sesión en su sitio web utilizando un proveedor externo.
Lo que realmente me gustaría hacer es que mi API REST maneje toda la autenticación central y la lógica comercial de mi aplicación web y que, bajo el capó, mi aplicación web sea esencialmente otra aplicación que simplemente use la API a través de OAuth. Los usuarios se autenticarían en el sitio web directamente usando su nombre de usuario y contraseña, o mediante un proveedor externo como MyOpenID o Facebook y luego el sitio web de alguna manera usaría el token devuelto para autenticarse en la API REST.
Básicamente parece que necesito mi API para alojar de alguna manera un servicio OAuth, pero también que los usuarios usen un servicio OAuth de terceros. No puedo evitar pensar que no tengo suficiente conocimiento de OAuth para decidir si estoy complicando demasiado las cosas o si lo que estoy tratando de hacer es una forma buena o mala de hacer las cosas.
¿Puede alguien darme al menos una visión general de los pasos que debo seguir, o qué debo mirar para que esto suceda? ¿O señalarme algunos tutoriales? ¿O arruinar mi propuesta y decirme que me estoy equivocando (arquitectónicamente)?