publicar net create asp app aplicacion asp.net authentication azure machinekey

asp.net - net - publicar aplicacion web en windows azure



Cómo configurar machineKey en el sitio web de Azure (3)

Intente restablecer la sección de configuración de la clave de máquina en Application_Start :

protected void Application_Start() { // ... var mksType = typeof(MachineKeySection); var mksSection = ConfigurationManager.GetSection("system.web/machineKey") as MachineKeySection; var resetMethod = mksType.GetMethod("Reset", BindingFlags.NonPublic | BindingFlags.Instance); var newConfig = new MachineKeySection(); newConfig.ApplicationName = mksSection.ApplicationName; newConfig.CompatibilityMode = mksSection.CompatibilityMode; newConfig.DataProtectorType = mksSection.DataProtectorType; newConfig.Validation = mksSection.Validation; newConfig.ValidationKey = ConfigurationManager.AppSettings["MK_ValidationKey"]; newConfig.DecryptionKey = ConfigurationManager.AppSettings["MK_DecryptionKey"]; newConfig.Decryption = ConfigurationManager.AppSettings["MK_Decryption"]; // default: AES newConfig.ValidationAlgorithm = ConfigurationManager.AppSettings["MK_ValidationAlgorithm"]; // default: SHA1 resetMethod.Invoke(mksSection, new object[] { newConfig }); }

Lo anterior supone que establece los valores adecuados en la sección <appSettings> :

<appSettings> <add key="MK_ValidationKey" value="...08EB13BEC0E42B3F0F06B2C319B..." /> <add key="MK_DecryptionKey" value="...BB72FCE34A7B913DFC414E86BB5..." /> <add key="MK_Decryption" value="AES" /> <add key="MK_ValidationAlgorithm" value="SHA1" /> </appSettings>

Pero puede cargar sus valores reales desde cualquier fuente de configuración que desee.

Estoy ejecutando un sitio web de Azure. Cada vez que despliegue, todos se desconectan porque machineKey cambia.

Especifiqué machineKey en el web.config pero esto no solucionó el problema. Creo que esto se debe a que Azure sobrescribe automáticamente la machineKey [1] .

He encontrado un par de preguntas similares aquí, pero las respuestas se vinculan a enlaces muertos.

Entonces, ¿cuál es la solución? Seguramente hay una forma de mantener a los usuarios conectados sin importar las implementaciones en Azure.


Si Azure está reescribiendo su machineKey, no puede hacer mucho al respecto, ya que es parte de su infraestructura. Sin embargo, hay otros métodos.

Anular FormsAuthentication

Esto no debería ser difícil, ya que puede buscar fácilmente el código fuente de FormsAuthentication y crear su propia lógica y reemplazar MachineKey con su propia clave almacenada en web.config o en su base de datos.

Filtro de autenticación personalizado

La forma más simple sería crear un filtro y verificar, verificar y cifrar las cookies de descifrado en su filtro. Debe hacer esto en el método OnAuthorization y crear una nueva instancia de IPrincipal y establecer IsAuthenticated en true si descryption se realizó correctamente.

OAuth

  1. Habilite OAuth y cree OAuthProvider. Sin embargo, tendrá que hospedar OAuthProvider en el servidor que está bajo su control, ya que necesitará que machineKey funcione.
  2. Habilite OAuth de terceros, si habilita OAuth con Google, Facebook, etc., será fácil, ya que el usuario será redireccionado al proveedor de OAuth y continuarán iniciando sesión automáticamente y se establecerá una nueva sesión.

Tuve el mismo problema y en mi caso estaba usando el webdeploy para el asistente de Azure en VS13. Pensé que me estaba volviendo loco ya que configuraría la clave de máquina en el archivo web.config y luego se cambiaría en el web.config desplegado para generar automáticamente. Es algo en la secuencia de comandos / configuraciones de webdeploy. Mi solución fue abrir el sitio azure en vivo desde VS13 usando Server Explorer y luego editando web.config y guardando los cambios. Esto conservó mi configuración con las teclas suministradas y todo funciona bien.