Visão geral do modelo de objeto de autenticação de cliente móvel do SharePoint

Obtenha uma visão geral do desenvolvimento com as APIs de autenticação do modelo de objeto cliente do SharePoint para Silverlight.

Contexto de cliente e de autenticação em um Windows Phone

O processo de autenticação de um usuário do SharePoint em um Windows Phone 7.5 é um pouco diferente do mesmo processo em um computador cliente. O código do cliente em um Windows Phone 7.5 cria primeiro um objeto da classe Authenticator ou da classe ODataAuthenticator, que foram adicionados ao modelo de objeto SharePointclient para Microsoft Silverlight para Windows Phone. Em seguida, usa esse objeto como as credenciais do usuário.

Observação

Para obter mais informações sobre as APIs discutidas nesta seção, confira Visão geral do modelo de objeto móvel do SharePoint. Para obter mais informações sobre o modelo de objeto cliente do SharePoint para Silverlight, consulte Modelo de objeto cliente gerenciado e usando o modelo de objeto Silverlight.

Autenticação do usuário no modelo de objeto do cliente do SharePoint para o Silverlight

A seguir estão as etapas necessárias para obter o objeto de contexto de um cliente autenticado:

  1. Obtenha um objeto ClientContext .

  2. Construir um novo objeto Authenticator e inicializar suas propriedades.

    Observação

    [!OBSERVAçãO] Um objeto Authenticator pode ser usado com apenas um objeto de ClientContext. Você não pode compartilhar um objeto Authenticator em vários objetos ClientContext com URLs diferentes.

  3. A classe Authenticator implementa a interface de ICredentials , para que você atribuir o objeto à propriedade credenciais do objeto ClientContext.

Você pode adicionar o restante do seu código de modelo de objeto do cliente e chamar ExecuteQueryAsync.

O código a seguir mostra essas etapas.


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
    });


Opcionalmente, você pode especificar um servidor Unified Access Gateway (UAG), definindo a propriedade Authenticator.UagServerUrl.

Se a URL do SharePoint tem suporte de autenticação básica ou baseada em formulários, as chamadas ExecuteQueryAsync solicita ao usuário informações de logon, conforme mostrado na Figura 1. Caso contrário, a chamada irá falhar. Ativar a autorização de autenticação básica ou baseada em formulários no site do SharePoint evitar um erro de autenticação.

Figura 1. Autenticação do cliente do SharePoint

SharePointClientAuthentication

O usuário digita o nome de usuário e senha e escolhe Logon, conforme mostrado na Figura 1. O usuário tem a opção escolher Lembrar-me lembrar seu nome de usuário e tem a opção escolher Lembrar minha senha para se lembrar da sua senha, conforme mostrado na Figura 1. Depois que o usuário nome ou a senha é lembrada, o usuário não precisa inserir credenciais na próxima vez em que o aplicativo é iniciado. O ExecuteQueryAsync usa conectado credenciais para fazer solicitações da web para o servidor que executa o SharePoint para buscar dados.

Autenticação do usuário no modelo de objeto do SharePoint OData

A seguir estão as etapas necessárias para obter um objeto de contexto do OData autenticado.

  1. Construir um novo objeto ODataAuthenticator e inicializar suas propriedades.

  2. Registre um manipulador para o evento AuthenticationCompleted.

  3. Chame o método ODataAuthenticator.Authenticate, o que elevará o evento AuthenticationCompleted.

  4. Obter um objeto de contexto do OData dentro do manipulador de OnAuthenticationCompleted.

Em seguida, você pode adicionar que o restante de sua OData chama no manipulador de OnAuthenticationCompleted.

O código a seguir mostra essas etapas.


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");  

Seu código também deve implementar dois manipuladores de eventos, conforme descrito na seção a seguir.

Implementando os manipuladores de OnAuthenticationCompleted e OnSendingRequest e Obtendo o objeto ClientContext

Uma implementação do manipulador OnAuthenticationCompleted deve verificar primeiro por erros na autenticação. Caso haja alguma, ele deve lidar com elas apropriadamente, como exibir uma mensagem de erro para o usuário e saia.

Se não houver nenhum erro, o manipulador deve criar uma instância de um novo objeto DataServiceContext e registre um manipulador para o evento SendingRequest. A partir desse momento, seu código de chamada de OData é programado contra o objeto DataServiceContext exatamente como se ele estiver em um computador.

O exemplo a seguir é um exemplo de uma implementação de um manipulador 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();   
}


Tudo o que o manipulador OnSendingRequest precisa fazer é definido o contêiner de cookie do objeto Request para o contêiner de cookie do objeto ODataAuthenticator. Apresentamos um exemplo a seguir.


void OnSendingRequest(object sender, SendingRequestEventArgs e)
{ 
    ODataAuthenticator oat = sender as ODataAuthenticator;
    ((HttpWebRequest)e.Request).CookieContainer = oat.CookieContainer;
}

Uso avançado

  1. Você pode escolher construir um objeto Authenticator com uma opção de senha do nome de usuário codificadas. O usuário do aplicativo não será solicitado para um nome de usuário e senha e codificadas credenciais serão usadas para autenticação do usuário.

    public Authenticator(string userName, string password)

    public Authenticator(string userName, string password, string domain)

    O mesmo construtor pode ser usado para criar uma página de logon personalizáveis. Você pode escrever uma página de logon personalizado ao passar as credenciais de arquivos code-behind.

  
Authenticator at = new Authenticator();
at.AuthenticationMode = ClientAuthenticationMode.MicrosoftOnline;                          

  1. Tipo de autenticação pode ser definido de acordo. Por padrão, a autenticação básica é usada.

Se autenticar no SharePoint Online

Para autenticar contra uma URL SharePoint Online, defina a propriedade AuthenticationMode do objeto Authenticator para o modo de MicrosoftOnline. As etapas restantes no procedimento são os mesmos para uma URL do SharePoint local.

Observação

[!OBSERVAçãO] O nome de usuário e senha não podem ser codificadas para SharePoint Online. O usuário será solicitado credenciais de logon.

Autenticação de Federação

propriedade FederationAuthURI é usada para passar a preferência de esquema de autenticação ADFS onde, ADFS está configurado para usar vários manipuladores de autenticação. FederationAuthURI Especifica o tipo de autenticação exigida por solicitação de autenticação quando, a autenticação de SharePoint Online é usada com federação. Esse parâmetro pode substituir a prioridade estabelecida pela ordem na qual os manipuladores de autenticação são configurados. Para saber mais sobre o manipulador de autenticação, consulte Visão geral sobre o manipulador de autenticação.


 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 é uma propriedade opcional que terão efeita somente quando ele é usado com o Microsoft SharePoint Online. Usando ADFS autenticação com qualquer outro esquema de autenticação não terá efeito algum. Com Microsoft Office SharePoint Online, se o ADFS não for definido, o esquema padrão será usado, ou seja, a preferência do servidor.

A classe Authenticator também inclui os membros que você pode usar para habilitar e gerenciar o cache de cookies ou credenciais ou ambos. Para obter informações sobre esses membros da classe Authenticator e seus usos, consulte Visão geral do modelo de objeto móvel do SharePoint.

Confira também