Introducción al modelo de objetos de autenticación de cliente móvil de SharePoint
Obtenga información general sobre el desarrollo con las API de autenticación del modelo de objetos de cliente de SharePoint para Silverlight.
Autenticación y contexto de cliente en un dispositivo con Windows Phone
El proceso de autenticación de un usuario de SharePoint en un dispositivo con Windows Phone 7.5 es ligeramente diferente del mismo proceso en un equipo cliente. El código de cliente de un Windows Phone 7.5 crea primero un objeto de la clase Authenticator o de la clase ODataAuthenticator, que se agregaron al modelo de objetos de SharePointclient para Microsoft Silverlight para Windows Phone. Después, usa este objeto como credenciales del usuario.
Nota:
Para obtener más información sobre las API que se describen en esta sección, vea Información general sobre el modelo de objetos móviles de SharePoint. Para obtener más información sobre el modelo de objetos de cliente de SharePoint para Silverlight, vea Modelo de objetos de cliente administrado y Uso del modelo de objetos de Silverlight.
Autenticación del usuario en el modelo de objetos de cliente de SharePoint para Silverlight
Los siguientes pasos son necesarios para obtener un objeto de contexto de cliente autenticado:
Obtenga un objeto ClientContext .
Construya un nuevo objeto Authenticator e inicialice sus propiedades.
Nota:
[!NOTA] Un objeto Authenticator solo se puede usar con un objeto ClientContext. No se puede compartir un objeto Authenticator con varios objetos ClientContext con diferentes direcciones URL.
La clase Authenticator implementa la interfaz ICredentials, por lo que el objeto se asigna a la propiedad Credentials del objeto ClientContext.
Después, puede agregar el resto del código del modelo de objetos de cliente y llamar a ExecuteQueryAsync.
El código siguiente muestra estos pasos.
ClientContext context = new ClientContext(ListUrl);
// Create an instance of Authenticator object.
Authenticator at = new Authenticator();
// Replace <username> and <password> with valid values.
at.UserName = "<username>";
at.Password = "<password>";
at.AuthenticationMode = ClientAuthenticationMode.FormsAuthentication;
at.CookieCachingEnabled = true;
// Assign the instance of Authenticator object to the ClientContext.Credential property.
// ClientContext is the object that is central to the client object model for making calls to the server running SharePoint
// for fetching and updating data.
context.Credentials = at;
ListItemCollection items = context.Web.Lists.GetByTitle(ListName).GetItems(CamlQuery.CreateAllItemsQuery());
// Load the query and execute the request to fetch data.
context.Load(items);
context.ExecuteQueryAsync(
(object obj, ClientRequestSucceededEventArgs args) =>
{
// Success logic
},
(object obj, ClientRequestFailedEventArgs args) =>
{
// Failure logic
});
Otra opción es establecer la propiedad Authenticator.UagServerUrl para especificar un servidor de Unified Access Gateway (UAG).
Si la dirección URL de SharePoint URL admite autenticación básica o basada en formularios, las llamadas a ExecuteQueryAsync piden al usuario información de inicio de sesión, como se muestra en la Figura 1. De lo contrario, se produce un error en la llamada. Habilite la autorización de autenticación básica o basada en formularios en el sitio de SharePoint para evitar un error de autenticación.
Figura 1. Autenticación de cliente de SharePoint
El usuario especifica el nombre de usuario y la contraseña y selecciona Iniciar sesión, como se muestra en la Figura 1. El usuario tiene la opción de elegir Recordarme para recordar su nombre de usuario, y Recordar contraseña para recordar su contraseña, como se muestra en la Figura 1. Una vez recordado el nombre de usuario o la contraseña, ya no tendrá que especificar las credenciales la próxima vez que inicie la aplicación. Después, ExecuteQueryAsync usa las credenciales de inicio se sesión para realizar las solicitudes web al servidor que ejecuta SharePoint con el fin de obtener los datos.
Autenticación del usuario en el modelo de objetos OData de SharePoint
Los siguientes pasos son necesarios para obtener un objeto de contexto de OData autenticado.
Construya un nuevo objeto ODataAuthenticator e inicialice sus propiedades.
Registre un controlador para el evento AuthenticationCompleted.
Llame al método ODataAuthenticator.Authenticate, que iniciará el evento AuthenticationCompleted.
Obtenga un objeto de contexto de OData dentro del controlador de OnAuthenticationCompleted.
Después, puede agregar el resto de las llamadas a OData al controlador de OnAuthenticationCompleted.
El código siguiente muestra estos pasos.
ODataAuthenticator oat = new ODataAuthenticator();
// Replace <username> and <password> with valid values.
oat.UserName = "<username>";
oat.Password = "<password>";
oat.AuthenticationMode = ClientAuthenticationMode.FormsAuthentication;
oat.AuthenticationCompleted +=
new EventHandler<SendingRequestEventArgs>(OnAuthenticationCompleted);
// The Authenticate method will raise the AuthenticationCompleted event.
oat.Authenticate("My_service_URL");
Asimismo, el código debe implementar dos controladores de eventos, tal y como se describe en la sección siguiente.
Implementación de los controladores de OnAuthenticationCompleted y OnSendingRequest y obtención del objeto ClientContext
Primero, una implementación del controlador de OnAuthenticationCompleted debe comprobar si hay errores de autenticación. Si los hubiera, debe administrarlos como corresponda, por ejemplo, mostrando un mensaje de error al usuario y, después, salir.
Si no hay errores, el controlador debe crear una instancia de un nuevo objeto DataServiceContext y, después, registrar un controlador para el evento SendingRequest. A partir de ese punto, el código que llama a OData se programa con relación al objeto DataServiceContext igual que en un equipo.
El siguiente ejemplo muestra la implementación de un controlador de OnAuthenticationCompleted.
void OnAuthenticationCompleted(object sender, AuthenticationCompletedEventArgs e)
{
if (e.Error != null)
{
MessageBox.Show(error);
return;
}
ODataAuthenticator oat = sender as ODataAuthenticator;
// Construct an OData context object.
contextObj = new DataServiceContext(oat.ResolvedUrl);
// Register the SendingRequest event handler.
contextObj.SendingRequest +=
new EventHandler<SendingRequestEventArgs>(OnSendingRequest);
// Your data retrieval logic goes here.
// For example, if there is a GetData method:
// contextObj.GetData();
}
Todo lo que tiene que hacer el controlador de OnSendingRequest es establecer el contenedor de cookies del objeto Request en el contenedor de cookies del objeto ODataAuthenticator. A continuación se muestra un ejemplo.
void OnSendingRequest(object sender, SendingRequestEventArgs e)
{
ODataAuthenticator oat = sender as ODataAuthenticator;
((HttpWebRequest)e.Request).CookieContainer = oat.CookieContainer;
}
Uso avanzado
Puede elegir construir un objeto Authenticator con una opción de usuario de nombre y contraseña codificados de forma rígida. No se pedirá un nombre de usuario y una contraseña al usuario de la aplicación, que se autenticará mediante las credenciales codificadas de forma rígida.
public Authenticator(string userName, string password)
public Authenticator(string userName, string password, string domain)
Se puede usar el mismo constructor para crear una página de inicio de sesión personalizada. Puede escribir una página de inicio de sesión personalizada pasando las credenciales desde archivos de código subyacente.
Authenticator at = new Authenticator();
at.AuthenticationMode = ClientAuthenticationMode.MicrosoftOnline;
- El tipo de autenticación se puede establecer según corresponda. De forma predeterminada, se usa la autenticación básica.
Autenticación con SharePoint Online
Para autenticar con una dirección URL SharePoint Online, establezca la propiedad AuthenticationMode del objeto Authenticator en el modo MicrosoftOnline. Los siguientes pasos del procedimiento son los mismos que para una dirección URL local de SharePoint.
Nota:
[!NOTA] El nombre de usuario y la contraseña no se pueden codificar de forma rígida para SharePoint Online. Se pedirán las credenciales al usuario.
Autenticación con federación
FederationAuthURI (propiedad) se utiliza para pasar preferencia de esquema de autenticación de ADFS donde, ADFS está configurado para utilizar varios controladores de autenticación. FederationAuthURI especifica el tipo de autenticación requerida por la solicitud de autenticación cuando, se usa la autenticación de SharePoint Online con la federación. Este parámetro puede invalidar la prioridad establecida por el orden en que se configuran los controladores de autenticación. Para obtener más información acerca del controlador de autenticación, consulte Información general sobre el controlador de autenticación.
Authenticator auth = new Authenticator("domain\\\\name", "xyz");
auth.FederationPassiveAuthUri = "urn:oasis:names:tc:SAML:2.0:ac:classes:Password";
//Replace <SiteUrl> with valid value
ClientContext ctx = new ClientContext("SiteUrl");
ctx.Credentials = auth;
ctx.ExecuteQueryAsync(
(object sender, ClientRequestSucceededEventArgs args) =>
{
/* successful callback code */
},
(object sender, ClientRequestFailedEventArgs args) =>
{
/* failure callback code */
});
ADFS es una propiedad opcional que será efectiva sólo cuando se usa con Microsoft SharePoint Online. Uso de ADFS la autenticación con cualquier otro esquema de autenticación no tendrá ningún efecto. Con Microsoft Office SharePoint Online, si ADFS no está establecido, se usará el esquema predeterminado, es decir, la preferencia del servidor.
Caché de cookies
La clase Authenticator también incluye miembros que puede usar para habilitar y administrar el almacenamiento en caché de cookies o credenciales, o ambas. Para obtener información sobre estos miembros de la clase Authenticator y sus usos, vea Información general sobre el modelo de objetos móviles de SharePoint.