Lectura del valor de la cookie: uso del módulo de proveedor de reescritura de URL: no se puede validar en System.Web.Configuration.MachineKeySection.EncryptOrDecryptData

Tengo el requisito de agregar NOMBRE DE USUARIO a la URL en el lado del servidor utilizando el módulo Reescribir URL.

¿Por qué? : Tengo el sitio web1 , cuando el USUARIO inicia sesión en el sitio1, verá un enlace al sitio2. , Este enlace es URL o informes. (Cuadro). El ticket autenticado se creó con FormAuthentication en site1. Cuando el USUARIO hace clic en el enlace, el nombre de usuario autenticado debe pasarse a sitio2.

Podría agregar un nombre de usuario desde el lado del cliente, pero debido a problemas de seguridad debo adjuntar el nombre de usuario a la URL en el lado del servidor antes de que se ejecute.

Así que he decidido utilizar el proveedor de reescritura de URL, que toma el nombre de usuario descifrando el valor de la cookie como se muestra a continuación

namespace PlatformAnalysisUrlProvider.PlatformAnalysisProvider { class AnalysisRewriteProvider: IRewriteProvider, IProviderDescriptor { public void Initialize(IDictionary settings, IRewriteContext rewriteContext) { } public string Rewrite(string value) { string[] cookievalues = value.Spli('='); FormAuthentication ticket = FormAuthentication.Decrypt(cookievalues[1]); //Decrypt throws error as shown below } } } 

Valores de cookies

  cookievalues [0] = has the key cookievalues [1] = has the value 

Ejemplo:

  233AWJDKSHFHFDSHFJKDFDKJFHDKJFKDJFHDHFDHFKJHDFKJHDFJHDKJFHDSKJFHDF 

Es un valor de cookie. Pero descifrar no está sucediendo

Estoy recibiendo un error de seguimiento

  Unable to validate data. at System.Web.Configuration.MachineKeySection.EncryptOrDecryptData( Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, IVType ivType, Boolean useValidationSymAlgo, Boolean signData) 

Aquí está mi configuración en IIS para reescritura de URL

  • URL solicitada: coincide con los patrones
  • Usando: expresión regular
  • Ignorar caso: revisado
  • Condiciones – Entrada: {HTTP_COOKIE} Tipo: coincide con el patrón de patrón:. *
  • Tipo de acción – Reescribir
  • Reescribir URL – http://11.155.011.123 {HTTP_URL} & USERNAME = {PlatformAnalysisUrlProvider: {C: 0}}

También configuré MACHINE KEY como lo sugirió este foro

He referido este post para desarrollo

Una de las publicaciones de desbordamiento de stack sugirió que podría tratarse de un firewall o un problema de antivirus. Pero no tengo antivirus instalado o Firewall habilitado.

Realmente ayuda que alguien me dirija a la muestra de código donde se usa el sitio web alojado en IIS y el proveedor de Reescritura de URL.

Actualización de registro de errores

Notificación de MODULE_SET_RESPONSE_ERROR_STATUS – “PRE_BEGIN_REQUEST” HttpReason – “Error de módulo de reescritura de URL”

Actualizando la publicación con información clave de la máquina

   

La razón puede ser : el sitio web donde se crean las cookies se desarrolla utilizando .NET Framework 4.5. El proveedor donde leemos la cookie es Framework 3.5. ¿Es esta la causa? O ¿Necesitamos un archivo de configuración para el proyecto del Proveedor?

Actualizaciones : he agregado la clave del equipo a Machine.config, pero todavía no funcionaba 🙁

Solución alternativa

  • Agregar App.config a la biblioteca de clases

              
  • Copie la configuración a GAC ​​Siga este blog – http://techphile.blogspot.in/2007/02/2.html

  • Cifre el valor ( consulte aquí ) y cree una cookie personalizada durante el inicio de sesión

  • Use la lógica de Decrption dentro del proveedor de reescritura personalizado

Lo bueno de esto es que el error es un error general de descifrado y no uno con la reescritura de URL, por lo que le da un área más amplia para buscar ayuda. La mecánica de la reescritura de URL parece ser la correcta.

El descifrado significa que debe ser encriptado por el mismo método que lo está descifrando. Entonces tiene que ser la cookie correcta y el método de descifrado correcto.

Como no está comprobando qué cookie está leyendo, puede obtener resultados inesperados si la cookie incorrecta aparece primero en la lista de cookies.

Aquí hay algunos pasos que recomiendo para resolver este problema:

  • Cree una regla de reescritura de URL simple que le dará el valor de su cookie. Creé una regla para hacer eso en mi ejemplo a continuación. Puedes probarlo yendo a yoursite.com/getcookie. Debería redirigir a yoursite.com/?Cookie={cookievalue}
  • Luego puede probar su código fuera del proveedor de reescritura de URL. Puede crear una aplicación de consola simple o una aplicación de winforms para probar el rest del código.
  • Recomiendo agregar un cheque para la existencia de la cookie y luego un control nuevamente para el 2do valor. Por ejemplo: if (cookievalues ​​[1]! = Null) .
  • Al desarrollar el método de descifrado, no tiene que preocuparse por la reescritura de URL. Siempre que funcione en una aplicación de prueba en .NET, entonces debería estar configurado.