XslCompiledTransform -> The remote server returned an error: (401) Unauthorized.

En un FBA desarrollado sobre CKS hemos tenido problemas a la hora de enviar correos de notificaciones en la parte de la intranet, el error que aparece es:

The remote server returned an error: (401) Unauthorized…

Justo aquí:

xslEmailTransform.Load(xsltTemplateFile, settings, resolver);






El problema es que la parte de aprobación de usuarios está montada sobre una Intranet con autenticación Windows y parace ser que las credenciales no están presentes en la petición que se hace sobre el xsl.





La solución es la siguiente:







var resolver = new XmlUrlResolver();



resolver.Credentials = CredentialCache.DefaultCredentials;



var settings = new XsltSettings(true, true);



xslEmailTransform.Load(xsltTemplateFile, settings, resolver);









Un saludo y buen finde.



He traducido el artículo “Upgrade an ASP.NET Web Application to ASP.NET 4”

El otro día en los foros de ASP.NET de la MSDN, Jesus preguntaba cuales eran los pasos a llevar cabo para migrar una aplicación ASP.NET 3.5 a 4.0:

 

http://social.msdn.microsoft.com/Forums/es-ES/netfxwebes/thread/4a67c646-7e29-4354-b74d-4d6af15a4f0f/#b1f8467d-d819-492e-9250-6dbe6fffc314

 

En el foro puse un enlace a un artículo de Microsoft en el que se explican los pasos:

How to: Upgrade an ASP.NET Web Application to ASP.NET 4

La cosa es que el artículo está en inglés, así que en mis ratos libres lo he ido traduciendo al español. Es más que probable que la traducción no sea perfecta, pero creo que se entiende bastante bien.

 

Un saludo.

 

Descargar PDF



Aplicación para hacer backup de tus post de CommunityServer

Ayer necesitaba recuperar mis post de geeks para un informe de actividad, y ya que alguno por Twitter me comentó que tal vez le interesaba, hoy publico el código con el cual recuperé los post.

He de decir que la app es un poco cutre y que la parte de procesar los post recuperados para guardarlos en bd, fichero, xml… no la he implementado y lo he dejado al gusto del consumidor (En mi caso lo almacené en un Excel) y que la parte de descargar imagenes no la he implementado porque no me hacía falta para mi caso, así que trabajo por hacer para el que quiera entretenerse un rato.

Para acceder a la API de CommunityServer he utilizado este proyecto:

http://www.pluralsight-training.net/community/blogs/aaron/archive/2008/08/19/programming-the-metaweblog-api-in-net-c.aspx

Esta es una captura de la app:

image

Un saludo

Descargar código



[MOSS 2010] Obtener los documentos de un Document Set

Para una demo desde un cliente VSTO Word, necesitaba mostrar los documentos de un Document Set de SharePoint 2010 en un TaskPane y en un principio había pensado hacerlo con un control WebBrowser de WPF, pero al final por una serie de requerimientos y problemas he tenido que hacerlo a través de un servicio web (Por ser versiones de framework diferentes), así que aquí os dejo el código y sí alguien encuentra una manera mejor o más efectiva de hacerlo que me lo diga por favor:

 

[WebMethod]



public List<Document> GetDocuments(Guid listId, int documentSetId)



{



    List<Document> documents = null;



 



    using (var site = new SPSite("http://tu_site"))



    {



        using (var web = site.OpenWeb("tu_web"))



        {



            var list = web.Lists.GetList(listId, true);



 



            var item = list.Items.OfType<SPListItem>().



                            SingleOrDefault(



                                i => i["ID"] != null && 



                                     Convert.ToInt32(i["ID"]) == documentSetId);



 



            if (item != null)



            {



                var documentSet = DocumentSet.GetDocumentSet(item.Folder);



 



                documents = documentSet.Folder.Files.OfType<SPFile>().Select(



                    f => new Document()



                                {



                                    Title = f.Title,



                                    Url = f.Url,



                                    IconUrl = f.IconUrl



                                }).ToList();



            }



        }



    }



 



    return documents;



}




 



Saludos.



[Resharper] Cuidado con el Cleanup Code en soluciones de SharePoint 2010

Para los que estáis trabajando con Resharper y SharePoint 2010 en Visual Studio 2010, tener cuidado al ejecutar el comando Cleanup code sobre la solución sin antes decirle a Resharper que no reformate el código XML:

image

El problema es que modifica los ficheros xml de *.Template.xml, elements.xml… y al hacer deploy te puedes encontrar con el error:

image

La solución en mi caso es crearme un perfil para SharePoint 2010, para ello pulsamos en Edit Profiles y añadimos uno nuevo:

image Y el check de XML “Reformat code” no lo marcamos:

image

Y con esto ya podemos pasar tranquilos en Cleanup Code.

 

Buen finde y Resharper Forever!!!



Tramitación online para administraciones públicas

Ahora que llevo un tiempo trabajando sobre este terreno, me gusta de vez en cuando, darme una vuelta por las diversas instituciones para ver que soluciones ofrecen al ciudadano: Portales, accesibilidad, tecnologías, seguridad, LOPD…

 

Hoy voy a hablar de un caso concreto (aunque no voy a mencionar el nombre de la institución ni la página web, al fin y al cabo es la competencia) en el que he realizado unos trámites para ver como se comporta la paltaforma y del cual he sacado algunas conclusiones que me gustaría compartir con vosotros:

 

Seguridad y LOPD

 

Una de las cosas más importantes que se debe tener en cuenta a la hora de realizar aplicaciones de este tipo, es la seguridad, y sobre todo el cumplimiento de la LOPD, estamos trabajando con información sobre ciudadanos: Datos personales y jurídicos (Denuncias, pagos…) y no puede ser que en el correo eléctrónico de comunicación con el ciudadano venga una dirección url a los detalles de tú trámite sin ni siquiera tener que autenticarte en el portal, es más, el enlace se lo he pasado a mi compañero y lo ve perfectamente.

 

Yo me pregunto: ¿Hasta que punto las Administraciones Públicas cumplen con la LOPD?

 

Desarrollo

 

Luego, en el correo que me envían para comunicarme que mi solicitud ha sido tramitada, me encuentro con otro enlace (muy similar al anterior) para ver el detalle de la actuación que se ha llevado a cabo, el cual me redirige a una página como la siguiente:

 

image 

Esto en un portal en producción, lo que me dice 2 cosas:

 

1. Que hacen pocas pruebas del código.

2. Qué muy poca gente ha realizado trámites online.

 

¿Todavía la gente no sabe la importancia de las pruebas unitarias, de integración y funcionales?

 

A parte, podrían haber utilizado un framework más moderno tipo ASP.NET ó ASP.NET MVC y de paso poner una página de error genérica para evitar dar detalles del error.

 

Esta prueba, ha sido sobre un trámite muy sencillo (Sugerencias) y que consta de 4 pasos, no quiero pensar cuando te pongas con trámites del tipo “Licencia de obras”, “Padrón”… ó cuando nos metamos en temas de pasarela de pago :S

 

Conclusión

 

Creo que este tipo de aplicaciones deberían tener un control más exhaustivo por parte de del ministerio de Administraciones públicas o del algún organismo encargado del tema, ya que la información que se maneja es bastante delicada.

 

Un saludo

Autenticación con DNIe en aplicaciones ASP.NET

Con este post quiero estrenar mi nuevo blog http://luisruizpavon.com, esto no es un adios a mi blog en Geeks, ni mucho menos, haré crossposting de lo que vaya con la temática de Geeks, pero hace tiempo que tenía en la cabeza crear un blog propio y al fin lo he hecho.

Lo primero es dejar claro que todo lo que voy a contar aquí es fruto de mi propia investigación, quién se haya pegado con esto o este en este momento investigando, sabrá que la información al respecto es bastante escasa. Me gustaría que si algo de lo que digo es erroneo o hay una forma mejor de hacerlo, me deje un comentario que será muy bien recibido.

 

La idea es poder acceder al portal de 2 maneras diferentes:

 

Sin DNie: El usuario accederá al portal introduciendo su DNI y su contraseña, que fueron introducidos cuando se produjo el alta en el mismo. Con este método, los trámites que necesiten DNIe no estarán disponibles hasta que no acceda con su DNIe.

 

Con DNie: El usuario introducirá su DNIe en el lector, accederá al portal y este, sí previamente realizó el registro manual introduciendo todos sus datos, automaticamente será identificado.

Yo he encontrado 2 formas de hacer esto y trataré de explicar un poco por encima como funcionan:

 

IIS 7 + Desarrollo de componentes

 

Una manera de poder permitir al usuario acceder al portal con su DNIe es configurar IIS 7 para que acepte certificado de cliente (El DNIe lleva 2 certificados, el de autenticación y el de firma).

 

Para ello lo primero es crearnos un certificado de prueba y habilitar el SSL en nuestro sitio. Luego en la configuración SSL del sitio marcamos que acepta certificado de cliente:

 

image

 

Accedemos con el DNIe en el lector y nos pedirá que seleccionemos el certificado:

 

image

 

Uno de los problemas que me he encontrado con IIS 7, tiene que ver con la comprobación del estado de revocación del cetificado. He tratado de configurarlo tal cual explica en muchos artículo pero simpre recibo el mismo error:

403.13 (Client Certificate Revoked)

Aquí se explica detalladamente y aunque habla de IIS 6 a mí en IIS 7 introduciendo el ocsp  de la policía no me funciona:

 

http://tiagoe.blogspot.com/2010/01/error-40313-client-certificate-revoked.html

 

Esto me lleva a realizar la comprobación del estado de revocación del certificado del DNIe mediante código c#, utilizando el protocolo OCSP (Online Certificate Status Protocol) qué es un método para determinar el estado de revocación de un certificado digital, en este caso para el DNIe está en esta dirección:

 

http://ocsp.dnie.es/

 

Aqúi tenéis código de ejemplo:

 

https://zonatic.usatudni.es/es/aprendizaje/aprende-sobre-el-dnie/58-desarrolla-con-el-dni-electronico/226-internet-information-services-iis.html?start=2

 

Una vez comprobado el estado de revocación del certificado y visto que es válido, necesitamos realizar la autenticación del usuario por FBA basado en los datos del certificado de autenticación del DNIe.

 

Usando el API de Tractis

 

He encontrado por casualidad esta página https://www.tractis.com de la cual no tenía ni idea de su existencia, pero la verdad es que me alegro de haberla encontrado.

Tractis Identity nos permite integrar en nuestras aplicaciones web verificaciones de identidad y permite a tus usuarios acceder a tu sitio web con cetificados electrónicos y todo esto de manera gratuita.

 

Lo primero que necesitamos es crearnos una cuenta para obtener un API Key:

 

image

 

Una vez creada, iniciamos sesión:

 

image

 

Una vez dentro, en la parte superior de la pantalla pinchamos sobre Identity

image

 

Vamos a crear nuestra API Key, para ello introducimos la dirección de nuestro sitio web, sí estamos en un entorno de desarrollo, para realizar pruebas, podemos añadir el nombre de nuestro sitio web al fichero hosts de nuestro sevidor y funcionará (Lo he probado), pulsamos sobre el botón Obtener API Key:

 

image

 

Y ya tenemos nuestra API Key para nuestro sitio web:

 

image

 

Para probarla basta con crearte una pequeña página HTML tal cual viene en el ejemplo que ellos ponen en su página (Lectura recomendada):

 

https://www.tractis.com/help/?p=3537&language=es

 

Para probarlo con SharePoint, podemos añadir la página al directorio _layouts:

 

image

image

image

 

Y nos retorna la página que le hemos indicado con la información de la validación:

 

image

 

Por último faltaría verificar los datos que nos han enviado desde la pasarela de Tractis para verificar que alguien no se está haciendo pasar por Tractis y nos ha metido la url a pelo en el navegador (Todo esto está en el enlace que puse anteriomente) y validarlo con nuestro sistema de autenticación, en mi caso con un FBA.

 

Un saludo y espero comentarios :)