ASP.Net MVC y WebForms comparten muchos de los mismos componentes, incluido el almacenamiento de miembros, la autenticación y la autorización. Estos componentes se utilizan en miles de sitios públicos en Internet.
membresía
La plantilla ASP.Net MVC predeterminada utiliza el mismo SqlMembershipProvider como formularios Web para almacenar información de pertenencia. Si busca en el archivo web.config
, verá la sección de configuración debajo del elemento <membership/>
, se verá así;
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
applicationName="/" />
</providers>
</membership>
Se hace referencia a la cadena de conexión llamado ApplicationServices
donde se puede encontrar definido en la parte superior del archivo de configuración:
<connectionStrings>
<add name="ApplicationServices"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient" />
</connectionStrings>
Esto monta el archivo aspnet.mdf
encontrado en el directorio de la aplicación App_Data
utilizando una instalación local instancia de Microsoft Sql Server Express.
Puede convertir fácilmente esto a SQL Server completo copiando el archivo MDB en su servidor SQL, montándolo y actualizando la cadena de conexión.
autenticación
autenticación está de nuevo a cargo de la misma clase FormsAuthentication utilizado para formularios Web, también se configura en el archivo web.config:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
Autorización
El valor por defecto la plantilla también tiene entradas de configuración para SqlRoleProvider y WindowsTokenRoleProvider que h se puede usar para almacenar y recuperar roles para sus usuarios desde la base de datos o ActiveDirectory, respectivamente. Los administradores de roles están configurados en el elemento <roleManager/>
.
<roleManager enabled="false">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
Los roles se desactivarán de forma predeterminada, puede habilitar el soporte para papeles cambiando el atributo enabled
del elemento de roleManager
false
a true
.
Una vez que haya configurado los roles, puede utilizar ASP.Net authorization elementos para controlar el acceso a los recursos en su sitio. También puede usar Authorize attributes en sus controladores y/o acciones para un control de acceso más detallado. Usted no tiene tiene para usar roles de autorización, los nombres de usuario funcionan bien, pero al hacerlo facilitará la administración de la autorización.
Seguridad
Todos estos módulos están escritos utilizando las mejores prácticas aceptadas de la industria de seguridad. Authentication es manejada por IIS, que puede usar Digest o Windows Integrated Auth, ambos métodos seguros; debido a la compatibilidad con el navegador, cualquier cosa que escribas tú también estará restringida a estos métodos.
Las contraseñas se almacenan en la base de datos hash con una sal de hacer ataques de fuerza bruta con métodos tales como tablas de arco iris mucho más difícil. Los proveedores también son compatibles con la complejidad de las contraseñas y el vencimiento fuera de la caja.
Los tokens de autenticación se cifran de forma segura con una clave específica de la máquina y se firman con un MAC para garantizar que no se hayan alterado, solo entonces se almacenan en una cookie del lado del cliente.
Comprobabilidad
A pesar de que la seguridad es bastante estándar, una énfasis que los defensores de MVC, que animan a estos componentes no hacen simple, es la prueba. Sin embargo, este problema se puede solucionar de forma bastante sencilla con algunas interfaces estratégicamente ubicadas, un par de clases de fachada y alguna inyección de dependencia (que ahora es compatible con MVC3 por defecto).
¿Qué demonios es con el -1? Fui el primero en publicar citas web.config, y es la misma respuesta extraña que todos los demás dieron. –