Descripción de la autenticación de ASP.NET AJAX y los servicios de aplicaciones de perfiles

por Scott Cate

El servicio de autenticación permite a los usuarios proporcionar credenciales para recibir una cookie de autenticación y es el servicio de puerta de enlace para permitir perfiles de usuario personalizados proporcionados por ASP.NET. El uso del servicio de autenticación AJAX de ASP.NET es compatible con la autenticación estándar de ASP.NET Forms, por lo que las aplicaciones que usan actualmente la autenticación de formularios (como con el control de inicio de sesión) no se romperán mediante la actualización al servicio de autenticación de AJAX.

Introducción

Como parte de .NET Framework 3.5, Microsoft ofrece una actualización de entorno considerable; no solo está disponible un nuevo entorno de desarrollo, sino también las nuevas características de Language-Integrated Query (LINQ) y otras mejoras de lenguaje están disponibles. Además, algunas características conocidas de otros conjuntos de herramientas, en particular las extensiones de AJAX de ASP.NET, se incluyen como miembros de primera clase de la biblioteca de clases base de .NET Framework. Estas extensiones permiten muchas nuevas características de cliente enriquecidas, incluida la representación parcial de páginas sin necesidad de una actualización de página completa, la capacidad de acceder a los servicios web a través del script de cliente (incluida la API de generación de perfiles de ASP.NET) y una amplia API del lado cliente diseñada para reflejar muchos de los esquemas de control vistos en el conjunto de controles del lado servidor de ASP.NET.

En estas notas del producto se examina la implementación y el uso de los servicios de generación de perfiles y autenticación de formularios de ASP.NET tal y como exponen las extensiones de AJAX de Microsoft ASP.NET. Las extensiones de AJAX hacen que la autenticación de formularios sea increíblemente fácil de admitir, ya que (así como el servicio de generación de perfiles) se expone a través de un script de proxy de servicio web. Las extensiones de AJAX también admiten la autenticación personalizada mediante la clase AuthenticationServiceManager.

Estas notas del producto se basan en la versión Beta 2 de Visual Studio 2008 y .NET Framework 3.5. En estas notas del producto también se da por supuesto que trabajará con Visual Studio 2008 Beta 2, no con Visual Web Developer Express y proporcionará tutoriales según la interfaz de usuario de Visual Studio. Algunos ejemplos de código pueden usar plantillas de proyecto no disponibles en Visual Web Developer Express.

Perfiles y autenticación

El sistema de autenticación de perfiles y autenticación de Microsoft ASP.NET proporciona los servicios de autenticación de formularios ASP.NET y son componentes estándar de ASP.NET. Las extensiones de AJAX de ASP.NET proporcionan acceso de script a estos servicios a través de servidores proxy de script, a través de un modelo bastante sencillo en el espacio de nombres Sys.Services de la biblioteca AJAX de cliente.

El servicio de autenticación permite a los usuarios proporcionar credenciales para recibir una cookie de autenticación y es el servicio de puerta de enlace para permitir perfiles de usuario personalizados proporcionados por ASP.NET. El uso del servicio de autenticación AJAX de ASP.NET es compatible con la autenticación estándar de ASP.NET Forms, por lo que las aplicaciones que usan actualmente la autenticación de formularios (como con el control de inicio de sesión) no se romperán mediante la actualización al servicio de autenticación de AJAX.

El servicio Profile permite la integración automática y el almacenamiento de datos de usuario en función de la pertenencia proporcionada por el servicio de autenticación. El archivo web.config especifica los datos almacenados y los distintos proveedores de servicios de generación de perfiles controlan la administración de datos. Al igual que con el servicio de autenticación, el servicio de perfil de AJAX es compatible con el servicio de perfil estándar ASP.NET, por lo que las páginas que actualmente incorporan características del servicio de perfil de ASP.NET no deben romperse mediante la inclusión de la compatibilidad con AJAX.

La incorporación de los servicios de autenticación y generación de perfiles de ASP.NET en una aplicación está fuera del ámbito de estas notas del producto. Para obtener más información sobre el tema, consulte el artículo de referencia de MSDN Library Administración de usuarios mediante pertenencia en https://msdn.microsoft.com/library/tw292whz.aspx. ASP.NET también incluye una utilidad para configurar automáticamente la pertenencia a un servidor SQL Server, que es el proveedor de servicios de autenticación predeterminado para la pertenencia de ASP.NET. Para obtener más información, consulte el artículo de ASP.NET Herramienta de registro de SQL Server (Aspnet_regsql.exe) en https://msdn.microsoft.com/library/ms229862(vs.80).aspx.

Uso del servicio de autenticación de AJAX de ASP.NET

El servicio de autenticación de AJAX de ASP.NET debe estar habilitado en el archivo web.config:

<system.web.extensions> 
 <scripting>
 <webServices>
 <authenticationService enabled="true" /> 
 </webServices>
 </scripting> 
</system.web.extensions>

El servicio de autenticación requiere que la autenticación de formularios ASP.NET esté habilitada y requiere que las cookies estén habilitadas en el explorador cliente (un script no puede habilitar una sesión sin cookies, ya que las sesiones sin cookies requieren parámetros de dirección URL).

Una vez habilitado y configurado el servicio de autenticación de AJAX, el script de cliente puede aprovechar inmediatamente el objeto Sys.Services.AuthenticationService. Principalmente, el script de cliente querrá aprovechar el método login y la propiedad isLoggedIn. Existen varias propiedades para proporcionar valores predeterminados para el método de inicio de sesión, que puede aceptar un gran número de parámetros.

Miembros Sys.Services.AuthenticationService

Método de inicio de sesión:

El método login() inicia una solicitud para autenticar las credenciales del usuario. Este método es asincrónico y no bloquea la ejecución.

Parámetros:

Nombre de parámetro Significado
userName Necesario. Nombre de usuario que se va a autenticar.
password Opcional (el valor predeterminado es NULL). Contraseña del usuario.
IsPersistent Opcional (el valor predeterminado es false). Si la cookie de autenticación del usuario debe conservarse entre sesiones. Si es false, se cerrará la sesión del usuario cuando se cierre el explorador o expire la sesión.
redirectUrl Opcional (el valor predeterminado es NULL). Dirección URL para redirigir el explorador a tras la autenticación correcta. Si este parámetro es null o una cadena vacía, no se produce ningún redireccionamiento.
customInfo Opcional (el valor predeterminado es NULL). Este parámetro no se usa actualmente y está reservado para su uso futuro.
loginCompletedCallback Opcional (el valor predeterminado es NULL). Función a la que se llamará cuando el inicio de sesión se haya completado correctamente. Si se especifica, este parámetro invalida la propiedad defaultLoginCompleted.
failedCallback Opcional (el valor predeterminado es NULL). Función a la que se va a llamar cuando se ha producido un error en el inicio de sesión. Si se especifica, este parámetro invalida la propiedad defaultFailedCallback.
userContext Opcional (el valor predeterminado es NULL). Datos de contexto de usuario personalizados que se deben pasar a las funciones de devolución de llamada.

Valor de retorno:

Esta función no incluye un valor devuelto. Sin embargo, se incluyen varios comportamientos al finalizar una llamada a esta función:

  • La página actual se actualizará o se cambiará si el parámetro redirectUrl no era null ni una cadena vacía.
  • Sin embargo, si el parámetro era null o una cadena vacía, se llama al parámetro loginCompletedCallback o a la propiedad defaultLoginCompletedCallback.
  • Si se produce un error en la llamada al servicio web, se llama al parámetro failedCallback de la propiedad defaultFailedCallback.

método de cierre de sesión:

El método logout() quita la cookie de credenciales y cierra la sesión del usuario actual de la aplicación web.

Parámetros:

Nombre de parámetro Significado
redirectUrl Opcional (el valor predeterminado es NULL). Dirección URL para redirigir el explorador a tras la autenticación correcta. Si este parámetro es null o una cadena vacía, no se produce ningún redireccionamiento.
logoutCompletedCallback Opcional (el valor predeterminado es NULL). Función a la que se llamará cuando el cierre de sesión se haya completado correctamente. Si se especifica, este parámetro invalida la propiedad defaultLogoutCompleted.
failedCallback Opcional (el valor predeterminado es NULL). Función a la que se va a llamar cuando se ha producido un error en el inicio de sesión. Si se especifica, este parámetro invalida la propiedad defaultFailedCallback.
userContext Opcional (el valor predeterminado es NULL). Datos de contexto de usuario personalizados que se deben pasar a las funciones de devolución de llamada.

Valor de retorno:

Esta función no incluye un valor devuelto. Sin embargo, se incluyen varios comportamientos al finalizar una llamada a esta función:

  • La página actual se actualizará o se cambiará si el parámetro redirectUrl no era null ni una cadena vacía.
  • Sin embargo, si el parámetro era null o una cadena vacía, se llama al parámetro logoutCompletedCallback o a la propiedad defaultLogoutCompletedCallback.
  • Si se produce un error en la llamada al servicio web, se llama al parámetro failedCallback de la propiedad defaultFailedCallback.

Propiedad defaultFailedCallback (get, set):

Esta propiedad especifica una función a la que se debe llamar si se produce un error al comunicarse con el servicio web. Debe recibir un delegado (o referencia de función).

La referencia de función especificada por esta propiedad debe tener la siguiente firma:

function AuthenticationFailureCallback(error, userContext, methodName);

Parámetros:

Nombre de parámetro Significado
error Especifica la información de error.
userContext Especifica la información de contexto de usuario proporcionada cuando se llamó a la función de inicio de sesión o cierre de sesión.
methodName Nombre del método que realiza la llamada.

Propiedad defaultLoginCompletedCallback (get, set):

Esta propiedad especifica una función a la que se debe llamar cuando se ha completado la llamada al servicio web de inicio de sesión. Debe recibir un delegado (o referencia de función).

La referencia de función especificada por esta propiedad debe tener la siguiente firma:

function AuthenticationLoginCompletedCallback(validCredentials, userContext, methodName);

Parámetros:

Nombre de parámetro Significado
validCredentials Especifica si el usuario proporcionó credenciales válidas. true si el usuario ha iniciado sesión correctamente; de lo contrario, false.
userContext Especifica la información de contexto de usuario proporcionada cuando se llamó a la función de inicio de sesión.
methodName Nombre del método que realiza la llamada.

Propiedad defaultLogoutCompletedCallback (get, set):

Esta propiedad especifica una función a la que se debe llamar cuando se ha completado la llamada al servicio web de cierre de sesión. Debe recibir un delegado (o referencia de función).

La referencia de función especificada por esta propiedad debe tener la siguiente firma:

function AuthenticationLogoutCompletedCallback(result, userContext, methodName);

Parámetros:

Nombre de parámetro Significado
resultado Este parámetro siempre será null; se reserva para su uso futuro.
userContext Especifica la información de contexto de usuario proporcionada cuando se llamó a la función de inicio de sesión.
methodName Nombre del método que realiza la llamada.

Propiedad isLoggedIn (get):

Esta propiedad obtiene el estado de autenticación actual del usuario; lo establece el objeto ScriptManager durante una solicitud de página.

Esta propiedad devuelve true si el usuario ha iniciado sesión actualmente; de lo contrario, devuelve false.

Propiedad path (get, set):

Esta propiedad determina mediante programación la ubicación del servicio web de autenticación. Se puede usar para invalidar el proveedor de autenticación predeterminado, así como un conjunto mediante declaración en la propiedad Path del nodo secundario AuthenticationService del control ScriptManager (para obtener más información, vea el tema Uso de un proveedor de servicios de autenticación personalizado a continuación).

Tenga en cuenta que la ubicación del servicio de autenticación predeterminado no cambia. Sin embargo, AJAX de ASP.NET permite especificar la ubicación de un servicio web que proporciona la misma interfaz de clase que el proxy de servicio de autenticación de AJAX de ASP.NET.

Tenga en cuenta también que esta propiedad no debe establecerse en un valor que dirija la solicitud de script fuera del sitio actual. Dado que la aplicación actual no recibiría las credenciales de autenticación, sería inútil; además, la tecnología subyacente de AJAX no debe publicar solicitudes entre sitios y puede generar una excepción de seguridad en el explorador cliente.

Esta propiedad es un objeto String que representa la ruta de acceso al servicio web de autenticación.

Propiedad timeout (get, set):

Esta propiedad determina el período de tiempo que se debe esperar al servicio de autenticación antes de suponer que se ha producido un error en la solicitud de inicio de sesión. Si el tiempo de espera expira mientras espera a que se complete una llamada, se llamará a la devolución de llamada con error de solicitud y la llamada no se completará.

Esta propiedad es un objeto Number que representa el número de milisegundos para esperar los resultados del servicio de autenticación.

Ejemplo de código: Iniciar sesión en el servicio de autenticación

El marcado siguiente es un ejemplo de página ASP.NET con una simple llamada de script a los métodos de inicio de sesión y cierre de sesión de la clase AuthenticationService.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head runat="server">
 <title>Login Example</title>
 <script type="text/javascript">
 function Login()
 {
 var userTextbox = $get("txtUser");
 var passTextbox = $get("txtPassword");
 Sys.Services.AuthenticationService.login(userTextbox.value, 
 passTextbox.value, false, null, null, LoginServiceCompleted, 
 LoginServiceFailed, "Context Info");
 }
 function Logout()
 {
 Sys.Services.AuthenticationService.logout(null, LogoutServiceCompleted, 
 LoginServiceFailed, "Context Info");
 }
 function LoginServiceFailed(error, userContext, methodName)
 {
 alert('There was an error with the authentication service:\n\n' + error);
 }
 function LoginServiceCompleted(validCredentials, userContext, methodName)
 {
 if (validCredentials)
 {
 alert('Great! You successfully logged in.');
 }
 else
 {
 alert('Oops! You gave us bad credentials!');
 }
 }
 function LogoutServiceCompleted(result, userContext, methodName)
 {
 alert('You have been logged out from the web site.');
 }
 </script>
 </head>
 <body>
 <form id="form1" runat="server">
 <asp:ScriptManager ID="ScriptManager1" runat="server" 
 EnableScriptLocalization="true">
 </asp:ScriptManager>
 <div>
 <asp:TextBox ID="txtUser" runat="Server"></asp:TextBox>
 <br />
 <asp:TextBox ID="txtPassword" runat="Server" TextMode="Password"/>
 <br />
 <asp:Button Text="Log in" ID="btnLogin" runat="server" 
 OnClientClick="Login(); return false;" />
 </div>
 </form>
 </body>
</html>

Acceso a datos de generación de perfiles de ASP.NET a través de AJAX

El servicio de generación de perfiles de ASP.NET también se expone a través de las extensiones AJAX de ASP.NET. Dado que el servicio de generación de perfiles de ASP.NET proporciona una API enriquecida y granular por la que almacenar y recuperar datos de usuario, puede ser una excelente herramienta de productividad.

El servicio de perfil debe estar habilitado en web.config; no lo está de forma predeterminada. Para ello, asegúrese de que el elemento secundario profileService tiene enabled= true especificado en web.config y de que ha especificado qué propiedades se pueden leer o escribir de la siguiente manera:

<system.web.extensions>
 <scripting>
 <webServices>
 <profileService enabled="true"
 readAccessProperties= Name,Address,BackgroundColor 
 writeAccessProperties= BackgroundColor />
 </webServices>
 </scripting>
</system.web.extensions>

El servicio de perfil también debe configurarse. Aunque la configuración del servicio de generación de perfiles está fuera del ámbito de esta notas del producto, vale la pena tener en cuenta que los grupos definidos en los valores de configuración de perfil serán accesibles como subpropiedades del nombre del grupo. Por ejemplo, con la siguiente sección de perfil especificada:

<profile enabled="true">
 <properties>
 <add name="Name" type="System.String"/>
 <group name="Address">
 <add name="Line1" type="System.String"/>
 <add name="Line2" type="System.String"/>
 <add name="City" type="System.String"/>
 <add name="State" type="System.String"/>
 <add name="Zip" type="System.String"/>
 </group>
 <add name="BackgroundColor" type="System.Drawing.Color"/>
 </properties>
</profile>

El script de cliente podría tener acceso a Name, Address.Line1, Address.Line2, Address.City, Address.State, Address.Zip y BackgroundColor como propiedades del campo de propiedades de la clase ProfileService.

Una vez configurado el servicio de generación de perfiles de AJAX, estará disponible inmediatamente en páginas; sin embargo, tendrá que cargarse una vez antes de su uso.

Miembros sys.Services.ProfileService

Campo de propiedades:

El campo de propiedades expone todos los datos de perfil configurados como propiedades secundarias a las que puede hacer referencia la convención dot-operator-name. Las propiedades que son elementos secundarios de grupos de propiedades se conocen como GroupName.PropertyName. En la configuración del perfil de ejemplo presentada anteriormente, para obtener el estado del usuario, puede usar el siguiente identificador:

Sys.Services.ProfileService.properties.Address.State

Método de carga:

Carga una lista seleccionada o todas las propiedades del servidor.

Parámetros:

Nombre de parámetro Significado
propertyNames Opcional (el valor predeterminado es NULL). Propiedades que se van a cargar desde el servidor.
loadCompletedCallback Opcional (el valor predeterminado es NULL). Función a la que se va a llamar cuando se ha completado la carga.
failedCallback Opcional (el valor predeterminado es NULL). Función a la que se va a llamar si se produce un error.
userContext Opcional (el valor predeterminado es NULL). Información de contexto que se va a pasar a la función de devolución de llamada.

La función load no tiene un valor devuelto. Si la llamada se completó correctamente, llamará al parámetro loadCompletedCallback o la propiedad defaultLoadCompletedCallback. Si se ha producido un error en la llamada o ha expirado el tiempo de espera, se llamará al parámetro failedCallback o la propiedad defaultFailedCallback.

Si no se proporciona el parámetro propertyNames, todas las propiedades configuradas para lectura se recuperan del servidor.

Método save:

El método save() guarda la lista de propiedades especificada (o todas las propiedades) en el perfil de ASP.NET del usuario.

Parámetros:

Nombre de parámetro Significado
propertyNames Opcional (el valor predeterminado es NULL). Propiedades que se van a guardar en el servidor.
saveCompletedCallback Opcional (el valor predeterminado es NULL). Función a la que se va a llamar cuando se ha completado el guardado.
failedCallback Opcional (el valor predeterminado es NULL). Función a la que se va a llamar si se produce un error.
userContext Opcional (el valor predeterminado es NULL). Información de contexto que se va a pasar a la función de devolución de llamada.

La función save no tiene un valor devuelto. Si la llamada se completa correctamente, llamará al parámetro saveCompletedCallback o la propiedad defaultSaveCompletedCallback. Si se produjo un error en la llamada o ha expirado el tiempo de espera, se llamará a la propiedad failedCallback o defaultFailedCallback.

Si el parámetro propertyNames es null, todas las propiedades de perfil se enviarán al servidor y el servidor decidirá qué propiedades se pueden guardar y cuáles no.

Propiedad defaultFailedCallback (get, set):

Esta propiedad especifica una función a la que se debe llamar si se produce un error al comunicarse con el servicio web. Debe recibir un delegado (o referencia de función).

La referencia de función especificada por esta propiedad debe tener la siguiente firma:

function AuthenticationFailureCallback(error, userContext, methodName);

Parámetros:

Nombre de parámetro Significado
Error Especifica la información de error.
userContext Especifica la información de contexto de usuario proporcionada cuando se llamó a la función load o save.
methodName Nombre del método que realiza la llamada.

Propiedad defaultSaveCompleted (get, set):

Esta propiedad especifica una función a la que se debe llamar tras la finalización de guardar los datos del perfil del usuario. Debe recibir un delegado (o referencia de función).

La referencia de función especificada por esta propiedad debe tener la siguiente firma:

function ProfileSaveComplete(numPropsSaved, userContext, methodName);

Parámetros:

Nombre de parámetro Significado
numPropsSaved Especifica el número de propiedades que se guardaron.
userContext Especifica la información de contexto de usuario proporcionada cuando se llamó a la función load o save.
methodName Nombre del método que realiza la llamada.

Propiedad defaultLoadCompleted (get, set):

Esta propiedad especifica una función a la que se debe llamar tras la finalización de la carga de los datos de perfil del usuario. Debe recibir un delegado (o referencia de función).

La referencia de función especificada por esta propiedad debe tener la siguiente firma:

function ProfileLoadComplete(numPropsLoaded, userContext, methodName);

Parámetros:

Nombre de parámetro Significado
numPropsLoaded Especifica el número de propiedades cargadas.
userContext Especifica la información de contexto de usuario proporcionada cuando se llamó a la función load o save.
methodName Nombre del método que realiza la llamada.

Propiedad path (get, set):

Esta propiedad determina mediante programación la ubicación del servicio web de perfil. Se puede usar para invalidar el proveedor de servicios de perfil predeterminado, así como un conjunto declarativo en la propiedad Path del nodo secundario ProfileService del control ScriptManager.

Tenga en cuenta que la ubicación del servicio de perfil predeterminado no cambia. Sin embargo, AJAX de ASP.NET permite especificar la ubicación de un servicio web que proporciona la misma interfaz de clase que el proxy de servicio de autenticación de AJAX de ASP.NET.

Tenga en cuenta también que esta propiedad no debe establecerse en un valor que dirija la solicitud de script fuera del sitio actual. La tecnología subyacente de AJAX no debe publicar solicitudes entre sitios y puede generar una excepción de seguridad en el explorador cliente.

Esta propiedad es un objeto String que representa la ruta de acceso al servicio web de perfil.

Propiedad timeout (get, set):

Esta propiedad determina el período de tiempo que se debe esperar al servicio de perfil antes de asumir que se ha producido un error en la solicitud de carga o guardado. Si el tiempo de espera expira mientras espera a que se complete una llamada, se llamará a la devolución de llamada con error de solicitud y la llamada no se completará.

Esta propiedad es un objeto Number que representa el número de milisegundos para esperar los resultados del servicio de perfil.

Ejemplo de código: Carga de datos de perfil en la carga de página

El código siguiente comprobará si un usuario está autenticado y, si es así, cargará el color de fondo preferido del usuario como el de la página.

function Page_Load()
{
 if (Sys.Services.AuthenticationService.get_isLoggedIn())
 {
 Sys.Services.ProfileService.load();
 }
}
function ProfileLoaded(numPropsLoaded, userContext, methodName)
{
 document.documentElement.style.backgroundColor = Sys.Services.ProfileService.properties.BackgroundColor;
}

Uso de un proveedor de servicios de autenticación personalizado

Las extensiones AJAX de ASP.NET le permiten crear un proveedor de servicios de autenticación de script personalizado exponiendo la funcionalidad a través de un servicio web personalizado. Para poder usarse, el servicio web debe exponer dos métodos Login y Logout; y estos métodos deben especificarse con las mismas firmas de método que el servicio web de autenticación de AJAX predeterminado ASP.NET.

Una vez que haya creado el servicio web personalizado, deberá especificar la ruta de acceso a él, ya sea mediante declaración en la página, mediante programación en el código o a través del script de cliente.

Para establecer la ruta de acceso mediante declaración:

Para establecer la ruta de acceso mediante declaración, incluya el elemento secundario AuthenticationService del objeto ScriptManager en la página de ASP.NET:

<asp:ScriptManager ID="ScriptManager1" runat="server">
 <AuthenticationService Path="~/AuthService.asmx" />
</asp:ScriptManager>

Para establecer la ruta de acceso en el código:

Para establecer la ruta de acceso mediante programación, especifique la ruta de acceso a través de la instancia del administrador de scripts:

protected void Page_Load(object sender, EventArgs e)
{
    this.ScriptManager1.AuthenticationService.Path = "~/AuthService.asmx";
}

Para establecer la ruta de acceso en el script:

Para establecer la ruta de acceso mediante programación en el script, utilice la propiedad path de la clase AuthenticationService:

function Login()
{
 var userTextbox = $get("txtUser");
 var passTextbox = $get("txtPassword");
 Sys.Services.AuthenticationService.set_path("./AuthService.asmx");
 Sys.Services.AuthenticationService.login(userTextbox.value, passTextbox.value, false, null, null, LoginServiceCompleted, LoginServiceFailed, "Context Info");
}

Servicio web de ejemplo para la autenticación personalizada

<%@ WebService Language="C#" Class="AuthService" %>
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Script.Services;
[ScriptService]
[WebService]
public class AuthService : WebService
{
 [WebMethod]
 public bool Login(string userName, string password, bool createCookie)
 {
 Session["LoggedInUser"] = userName;
 return true;
 }
 [WebMethod]
 public void Logout()
 {
 Session.Abandon();
 }
}

Resumen

Los servicios ASP.NET (específicamente los servicios de generación de perfiles, pertenencia y autenticación) se exponen fácilmente a JavaScript en el explorador cliente. Esto permite a los desarrolladores integrar su código del lado cliente con el mecanismo de autenticación sin problemas, sin depender de controles como UpdatePanels para realizar el trabajo pesado. Los datos de perfil también se pueden proteger del cliente mediante la configuración web; no hay datos disponibles de forma predeterminada y los desarrolladores deben participar en las propiedades de perfil.

Además, mediante la creación de implementaciones de servicios web simplificadas con firmas de método equivalentes, los desarrolladores pueden crear proveedores de scripts personalizados para estos servicios de ASP.NET intrínsecos. La compatibilidad con estas técnicas simplifica el desarrollo de aplicaciones cliente enriquecidas, al tiempo que proporciona a los desarrolladores una amplia gama de flexibilidad para satisfacer necesidades específicas.

Biografía

Scott Cate ha trabajado con las tecnologías web de Microsoft desde 1997 y es el presidente de myKB.com (www.myKB.com) donde se especializa en escribir aplicaciones ASP.NET basadas en soluciones de software de Knowledge Base. Puede ponerse en contacto con Scott por correo electrónico en scott.cate@myKB.com o en su blog, ScottCate.com