Cómo crear claves utilizando Visual C# .NET para su uso en autenticación mediante formularios

Para una versión de Microsoft Visual Basic .NET de este artículo, consulte 313091 .


En este artículo se refiere a los siguientes espacios de nombres de biblioteca de clases de Microsoft.NET Framework:
  • System.Text
  • System.Security.Cryptography

EN ESTA TAREA

Resumen

Este artículo describe cómo crear claves para el cifrado, descifrado y validación de datos de cookie de autenticación de formularios. Puede utilizar las teclas que creará en este artículo para los atributos validationKey y decryptionKey de la sección < machineKey > en el elemento < system.web > del archivo Machine.config.

Volver al principio

Requisitos

La lista siguiente describe el hardware, software, infraestructura de red y service packs recomendados que necesita:
  • Microsoft Windows 2000 o Microsoft Windows XP
  • Microsoft.NET Framework
  • Microsoft Internet Information Services (IIS)
Volver al principio

Crear el proyecto

Crear una aplicación de consola de Visual C#. NET:
  1. Inicie Visual Studio. NET.
  2. En el menú archivo , elija nuevoy, a continuación, haga clic en proyecto.
  3. En Tipos de proyecto, haga clic en Proyectos de Visual C#.
  4. En plantillas, haga clic en aplicación de consola.
  5. Nombre del proyecto
    HashConfigCs.
  6. Haga clic en Aceptar.
Volver al principio

Escribir el código para generar las claves

El código siguiente lee dos argumentos que se pasan desde la línea de comandos:
  • El primer argumento es el número de bytes que se utiliza para crear el atributo decryptionKey .
  • El segundo argumento es el número de bytes que se utiliza para crear el atributo validationKey .
El código utiliza un generador de números aleatorios para crear un número aleatorio de bytes en función de los argumentos de línea de comandos. Una vez creados los bytes aleatorios, se formatean los bytes en una cadena hexadecimal que es adecuada para su uso en los archivos Config.

Nota: La cadena hexadecimal que se crea es dos veces el tamaño del valor que se pasa en la línea de comandos. Por ejemplo, si especifica 24 bytes de una clave, la cadena resultante es 48 bytes de longitud después de la conversión. Los valores válidos para decryptionKey es 8 o 24. Esto crea una clave de 16 bytes para el cifrado de datos estándar (DES) o una clave de 48 bytes para Triple DES, respectivamente. Los valores válidos para validationKey son 20 a 64. Esto crea claves de 40 a 128 bytes de longitud. El resultado del código es un elemento de todo < machineKey > que puede copiar y pegar en un archivo Machine.config.

Agregue el código siguiente en un archivo. cs:
using System;using System.Text;
using System.Security.Cryptography;

namespace Crypto
{
public class KeyCreator
{
public static void Main(String[] args)
{
String[] commandLineArgs = System.Environment.GetCommandLineArgs();
string decryptionKey = CreateKey(System.Convert.ToInt32(commandLineArgs[1]));
string validationKey = CreateKey(System.Convert.ToInt32(commandLineArgs[2]));

Console.WriteLine("<machineKey validationKey=\"{0}\" decryptionKey=\"{1}\" validation=\"SHA1\"/>", validationKey, decryptionKey);
}

static String CreateKey(int numBytes)
{
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] buff = new byte[numBytes];

rng.GetBytes(buff);
return BytesToHexString(buff);
}

static String BytesToHexString(byte[] bytes)
{
StringBuilder hexString = new StringBuilder(64);

for (int counter = 0; counter < bytes.Length; counter++)
{
hexString.Append(String.Format("{0:X2}", bytes[counter]));
}
return hexString.ToString();
}
}
}

Volver al principio

Generar los valores hash

Ahora puede compilar la aplicación.

Ejecute la aplicación desde un símbolo del sistema, pasando dos valores enteros que son del tamaño de las claves de validación y el descifrado. Por ejemplo, si llama la aplicación de consola HashConfigCs.exe, escriba la siguiente sintaxis de la línea de comandos en el directorio Bin\debug de la aplicación:
hashconfigcs.exe 24 64
Puede esperar la aplicación para obtener una salida similar a la siguiente salida:
<machineKey validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"
decryptionKey="261F793EB53B761503AC445E0CA28DA44AA9B3CF06263B77"
validation="SHA1"/>

Nota: Dado que el código utiliza un generador de números aleatorios, el resultado es diferente cada vez.

Volver al principio

Actualizar el archivo de configuración

  1. Busque el archivo Machine.config.
  2. Busque la sección < system.web > del archivo de configuración.
  3. Reemplazar la sección < machineKey > con la salida de la aplicación de consola. Si la sección < machineKey > no existe, créela.
  4. Guarde el archivo de configuración.
  5. Reinicie IIS en todos los servidores de la granja de servidores Web para que surtan efecto los cambios de Machine.config.
Volver al principio

Solución de problemas

Asegúrese de que la sección < machineKey > tiene llaves idénticas, explícita (es decir, no utilice la opción AutoGenerate para los atributos de la sección < machineKey >) en toda la granja de servidores Web en las siguientes situaciones:
  • Si utiliza la autenticación de formularios.
  • Al ejecutar el estado de sesión en el modo StateServer.
  • Cuando desea que ViewState esté disponible a través de una granja de servidores Web porque el atributo enableViewStateMAC se establece en True de forma predeterminada.
Volver al principio

Más información

La sección machineKey debe ser el mismo en toda la granja de servidores web en los siguientes casos:
  • Al utilizar la autenticación de formularios.
  • Al ejecutar el estado de sesión en el modo StateServer.
  • Cuando desea que viewstate esté disponible en una granja web puesto que enableViewStateMac está activado de forma predeterminada.
Volver al principio

Referencias

Para obtener información adicional, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:

301240 cómo implementar la autenticación basada en formularios en su aplicación ASP.NET mediante .NET C#

311495 cómo implementar seguridad basada en funciones con autenticación basada en formularios en su aplicación ASP.NET mediante Visual C#.

306590 INFO: Introducción a la seguridad ASP.NET

307626 INFO: información general de configuración de ASP.NET

Volver al principio
Propiedades

Id. de artículo: 312906 - Última revisión: 22 ene. 2017 - Revisión: 1

Comentarios