tutorial por net mvc example autenticacion asp asp.net-mvc api oauth dotnetopenauth

asp.net-mvc - por - security asp net mvc



API basada en MVC: ¿cómo implementar OAuth? (1)

He intentado durante horas hacer que OAuth trabaje con una API en la que estoy trabajando, y obviamente mi enfoque debe ser incorrecto, porque constantemente llego a callejones sin salida.

Lo que tengo:
- Una API que se implementa en .NET MVC, que devuelve un resultado de datos como XML o JSON.
- Requiere una clave API para poder usar la API.
- Un sitio web (X) como backend para administrar las claves API.
- Otro sitio web (Y) con una gran cantidad de datos de los que esta API extrae datos.

Lo que se supone que debo obtener:
- La capacidad de permitir que las claves API accedan a los datos de los usuarios del sitio web (Y), si lo permiten a través de OAuth (1.0A).

Lo que he intentado:
- Hasta ahora, mi enfoque ha sido utilizar la biblioteca DotNetOpenAuth, pero casi todo se trata de cómo implementar OpenId, y algunas clases en el espacio de nombres de OAuth incluso parecen codificadas de forma rígida para la funcionalidad OpenId. Así que he estado tratando de ver qué está pasando en los ejemplos que están usando OpenId, y veo si puedo usar partes de eso para implementar OAuth sin OpenId.
- Varios enfoques incluyen, en el lado del servidor, leer una "Solicitud de registro no autorizada" y devolverla mediante una llamada a ServiceProvider.Channel.PrepareResponse (no autorizadoTokenRequest) .AsActionResult (), que por algún motivo intenta agregar dos valores de nonce y timestamp a la respuesta que se bloquea y omitiendo eso, todavía devuelve una respuesta que no puedo leer en el extremo del cliente.

Así que supongo que mi pregunta realmente es:

  1. ¿Existe una guía / documentación que indique qué partes de la biblioteca DotNetOpenAuth debería utilizar en el lado del servidor, y cuando en el proceso deberían utilizarse, para implementar OAuth en un servidor MVC que no está codificado en OpenId, ya que ninguno de los sitios web (X ni Y) es compatible con OpenId?
  2. ¿Debo usar otra biblioteca si no voy a usar OpenId ya que DotNetOpenAuth parece estar enfocando más?
  3. Cualquier otro enfoque que se ajuste mejor a mi necesidad es muy bienvenido.

¡Gracias de antemano!
- Johny, Dinamarca


DotNetOpenAuth admite OpenID, OAuth e InfoCard cuando se usan juntos y por separado. Parece que lo que está creando se ajusta a lo que demuestra la muestra de DotNetOpenAuth "OAuthServiceProvider". Es cierto que esa muestra usa OpenID para iniciar sesión en los usuarios, pero puede ignorar por completo la página login.aspx en la muestra y, por lo tanto, estar completamente separada de OpenID. El uso de OAuth sin OpenID es totalmente compatible.

La pareja de métodos relacionados con OpenID en las clases OAuth es simplemente para admitir la extensión "OpenID + OAuth" de OpenID, que no se aplica a su situación, por lo que puede ignorarlos.

En cuanto a su problema de nonce agregado dos veces que vio, a veces sucede que el proveedor de servicios inapropiadamente tiene dos módulos que validan las solicitudes entrantes de OAuth, cada uno validando el nonce y por lo tanto el segundo módulo siempre rechaza cada solicitud. Puede verificar si eso está causando su problema. De lo contrario, vea si la muestra sin modificar le funciona, y si es así, compare lo que hace con lo que está haciendo para ver qué puede estar yendo mal. Activar el registro también ayuda con frecuencia.