¿Por qué mi membresía personalizada y mi proveedor de roles trabajan localmente, pero fallan después de la implementación?

StackOverflow https://stackoverflow.com/questions/9301572

Pregunta

Creé una membresía personalizada y un proveedor de roles para aprovechar la autenticación y la autorización integradas en ASP.NET MVC 4. Todo había ido sin problemas durante el desarrollo de mi aplicación hasta que intenté implementarla en un entorno de prueba.

El lanzamiento de la aplicación en modo de depuración desde Visual Studio funciona perfectamente bien. Sin embargo, luego uso la implementación de un clic de Visual Studio para cargar mi aplicación en una instancia de IIS que se ejecuta en mi máquina de desarrollo. Puedo cargar la aplicación en mi navegador, pero la autenticación ya no funciona. Usando Fiddler, veo que se envía una cookie, pero no puedo acceder a partes del sitio que están restringidas usando atributos [autorizar].

A continuación se muestra un fragmento relevante de mi web.config.

<membership defaultProvider="PonosMembershipProvider">
  <providers>
    <clear />
    <add name="PonosMembershipProvider" type="Ponos.Identity.PonosMembershipProvider" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/Ponos" />
  </providers>
</membership>
<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
  <providers>
    <clear />
    <add name="DefaultRoleProvider" type="Ponos.Identity.PonosRoleProvider" connectionStringName="DefaultConnection" applicationName="/Ponos" />
  </providers>
</roleManager>

Además, configuré el nombre de la aplicación en ambos proveedores personalizados con Logic de la siguiente manera:

public override string ApplicationName
    {
        get
        {
            return "Ponos";
        }
        set
        {
            throw new NotImplementedException();
        }
    }

Además, después de adjuntar a la instancia en ejecución de IIS, veo que la información ingresada en el formulario pasa la validación, pero que no se otorga acceso a las páginas que han restringido el acceso autorizado.

Además, la base de datos sobre que se utiliza para la implementación se pobla con los mismos valores que la base de datos de desarrollo.

¿Por qué los proveedores no funcionarían después de la implementación cuando funcionan bien en el entorno de depuración?

¿Fue útil?

Solución 2

Este problema solo apareció cuando su IP accedió directamente a mi servidor implementado. Cuando agregué una entrada de hosts, mapeo de un dominio a la IP y posteriormente establecí el mismo dominio en mi cookie de autenticación, el problema se resolvió.

No estoy seguro de por qué no podría acceder a la cookie si el dominio era una dirección IP, pero esto solucionó el problema.

Otros consejos

"Veo que la información ingresada en el formulario pasa la validación, pero que no se otorga acceso a las páginas que han restringido el acceso autorizado".

¡Parece un problema de permisos!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top