2009-05-09 8 views
8

De la mayoría de las lecturas que he hecho en OpenID, parece que se requiere un navegador. Estoy escribiendo una aplicación WCF y quería utilizar OpenID como método de autenticación, pero mi aplicación no es una aplicación web. ¿Es posible usar WCF y OpenID juntos sin requerir un navegador web?Usando OpenID con WCF y sin navegador, ¿es posible?

+0

Lo siento por este último comentario. Pero con "sin navegador", ¿quiere decir que muestra su propia ventana de inicio de sesión y permite que los usuarios ingresen su nombre de usuario y contraseña de Google, por ejemplo? Si fuera un usuario, NUNCA entregaría mi usuario/contraseña de esa manera. –

Respuesta

10

Mientras OpenID puede tout en su independencia de especificaciones de las cookies y tal porque la especificación en realidad no ordena cómo se usan esas cosas, en realidad nunca he visto una buena solución OpenID para nada además de iniciar sesión en un sitio web, que es realmente su caso de uso principal.

Sin embargo, hay una buena manera de hacerlo y seguir usando WCF y OpenID. Agregue OAuth a la mezcla. La biblioteca DotNetOpenAuth tiene un ejemplo que muestra cómo un cliente WCF puede obtener autorización para llamar a un servicio WCF a través de OAuth, donde en el lado del servicio el usuario usa OpenID para iniciar sesión como parte del proceso de autorización.

Así que, básicamente, si WCF aplicación necesita a "conectarse" con el fin de llamar al servicio de WCF, como parte de una configuración de una sola vez:

  1. La aplicación aparece un navegador en el que el usuario ve la Sitio web del servicio WCF (el proveedor de servicios OAuth)
  2. El usuario inicia sesión con su OpenID (aunque es posible que el usuario ya haya iniciado sesión, en cuyo caso puede omitir este paso)
  3. El OAuth SP le pregunta al usuario "do ¿Desea autorizar esta [aplicación wcf] para acceder a este sitio? "
  4. El usuario dice que sí y cierra el navegador.
  5. La aplicación WCF ahora tiene acceso, gracias al protocolo OAuth, al servicio WCF.

Esto funciona porque entre bastidores, cuando el usuario dice "sí" al servicio a través del navegador web, se asigna una credencial amigable para la máquina a la aplicación WCF, que utiliza con cada servicio WCF. una forma similar de un nombre de usuario/contraseña.

Consulte la biblioteca DotNetOpenAuth. Tiene la muestra y todo lo que necesitas para que funcione.

+0

Esta publicación fue muy perspicaz, ¡gracias! Echaré un vistazo a DotNetOpenAuth. –

1

De la lectura de la OpenID Authentication 2.0 Specification, que parecen haber llegado a una respuesta:

Aunque nada en el protocolo requiere JavaScript o navegadores modernos, el esquema de autenticación juega muy bien con "Ajax" al estilo de configuraciones. Esto significa que un usuario final puede probar su identidad a una Parte que confía sin tener que abandonar su página web actual.

La autenticación OpenID utiliza solo solicitudes y respuestas HTTP (S) estándar, por lo que no requiere ninguna capacidad especial del User-Agent u otro software cliente. OpenID no está ligado al uso de cookies ni a ningún otro mecanismo específico de la administración de sesión de la Parte que confía o del proveedor de OpenID. Las extensiones a User-Agents pueden simplificar la interacción del usuario final, aunque no es necesario que utilicen el protocolo.

Ahora sólo hay que encontrar una forma inteligente de conseguir que funcione con un usuario de confianza basados ​​en WCF ...

1
+0

Esto suena muy simple. No se requiere interacción con el navegador? –

+0

No se requiere interacción con el navegador, pero no sé cómo usar este proveedor, tal vez tenga algunas dependencias en ASP.NET que lo hagan activar el modo de compatibilidad. ver: http://msdn.microsoft.com/en-us/library/aa702682.aspx Hay varios OpenIDMembershipProvider que existen, no probé ninguno de ellos. Suponiendo que funcionen como se esperaba, solo tiene que "enchufar" su openIdMembershipProvider, y luego decir WCF para usarlo para autenticar las solicitudes. –

Cuestiones relacionadas