Este es un buen punto de inicio de un servicio web WCF REST:
REST/SOAP endpoints for a WCF service
(BTW: Stackoverflow tiene una especie agradable resto de las direcciones URL.) Puede probar un servicio REST con sólo un navegador web (Vaya a la url y obtenga el XML o JSON). Fiddler es también una buena herramienta, y FireBug-plugin para FireFox. Normalmente hago un proyecto de interfaz de servicio delgado y un proyecto de lógica separado (probado por unidad).
Para la autenticación, primero generaría un Guid y una marca de tiempo. Luego, basado en esos hash (.NET es compatible con SHA256 y SHA512). El Guid se puede almacenar en el servidor (tabla de la base de datos) para asignarle una identificación numérica concreta. A continuación, puede tener una URL resto como:
/myobject/1?timestamp=20100802201000&hash=4DR7HGJPRE54Y
y simplemente desactivar la comprobación de marca de tiempo de hash & en el entorno de desarrollo (por ejemplo, con AOP). Con la marca de tiempo verificaría que el sello esté entre 15 minutos atrás y adelante en el tiempo (= debería ser suficiente para evitar ataques).
¿Su servicio será visible para el público/Internet y es su cliente un cliente jQuery o Silverlight? Entonces todavía tiene un problema: no desea incluir una clave secreta en el código de software del cliente.
Así que debe generar hash en el servidor y algún tipo de cookie para almacenar la sesión del cliente. (Esto puede hacerse, por ejemplo, con una página/aplicación de inicio de sesión separada en una carpeta con diferentes archivos de configuración.) Recuerdo que this book tenía algo sobre el tema:
Si desea habilitar el HttpContext cuando usa WCF, necesita configurar <serviceHostingEnvironment aspNetCompatibilityEnabled="true">
bajo <system.serviceModel>
. Luego puede verificar la identidad del usuario actual desde HttpContext.Current.User.Identity.Name
.
Sin embargo, si desea hacer un servicio REST puro, entonces no utiliza cookies, sino una Autenticación Básica HTTP junto con SSL/TLS para cada llamada.
Creo que es fácil hacer un cliente con solo LINQ2Xml o jQuery, por lo que tal vez no sea necesaria la generación del cliente.
O también puede tener ambas, una interfaz SOAP y REST, y usar una referencia de servicio para crear un cliente.
¿por qué necesito el guid? –
Una vieja pregunta es "¿Cuál es mejor ID: numérica o Guid?" Guid es más seguro ya que no puedes adivinarlo. Pero la identificación numérica es más clara, simple y limpia. Si generas un hash solo por identificador numérico y marca de tiempo, no es tan seguro: después de todo, se han roto todos los algoritmos de hash principales (MD5, SHA). Pueden generar sumas de comprobación simétricas válidas. No tan rápido que importaría ahora, pero tal vez en unos pocos años la situación sea diferente. Con esta solución obtienes ventajas de ambos tipos: No se pueden adivinar códigos hash válidos fácilmente, pero no es necesario transferir identificadores basados en Guid. –
:) mi pregunta no era "guid vs number". Era más como. cuándo y quién genera el guid en el flujo de trabajo? –