Compartilhar via


Conecte-se ao serviços da Web de Microsoft Dynamics 365 usando OAuth

 

Publicado: janeiro de 2017

Aplicável a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

OAuth é o método de autenticação suportado pelo API da Web Microsoft Dynamics 365, e é um dos dois métodos de autenticação para o Organization Service – o outro sendo a autenticação do Active Directory. Um benefício de usar OAuth é que o aplicativo pode oferecer suporte à autenticação do fator. Você pode usar a autenticação de OAuth quando o aplicativo quando o serviço da organização ou o serviço de descoberta.

Um método dos serviços Web devem ser qualificados com o provedor de identidades no ponto de extremidade de serviço. A autorização é aprovada quando um acesso ao OAuth 2.0 válido (usuário), emitido por Active Directory do Microsoft Azure, é fornecido nos cabeçalhos das solicitações de mensagem.

A API de autenticação recomendada para uso com o API da Web de Dynamics 365 ŕ Azure Active Directory Authentication Library (ADAL), que está disponível para uma ampla variedade de plataformas e idiomas de programação. O ADAL API gerencia autenticação de OAuth 2.0 com fornecedor de identidade de serviço da Web Dynamics 365. Para obter mais detalhes sobre o protocolo atual usado OAuth, consulte Usar OAuth para autenticar com o serviço CRM.

Antes de usar a autenticação OAuth para conectar com os serviços Web Dynamics 365, seu aplicativo deve ser primeiro registrado com Active Directory do Microsoft Azure.Active Directory do Azure é usado para verificar se seu aplicativo é permitido para acessar os dados corporativos armazenados em um locatário de Dynamics 365.

Autenticar Usando ADAL

A autenticação OAuth básica de um serviço Web que usa ADAL é feita com apenas as linhas do código.

// TODO Substitute your correct CRM root service address, 
string resource = "https://mydomain.crm.dynamics.com";

// TODO Substitute your app registration values that can be obtained after you
// register the app in Active Directory on the Microsoft Azure portal.
string clientId = "e5cf0024-a66a-4f16-85ce-99ba97a24bb2";
string redirectUrl = "https://localhost/SdkSample";


// Authenticate the registered application with Azure Active Directory.
AuthenticationContext authContext = 
    new AuthenticationContext("https://login.windows.net/common", false);
AuthenticationResult result = authContext.AcquireToken(resource, clientId, new
                                                       Uri(redirectUrl));

O contexto será retornado a autenticação usando um provedor de autoridade conhecido. Quando você não conhece o locatário de Active Directory do Azure associado com a instância Dynamics 365 que você está chamando, você pode usar uma cadeia constante de " https://login.windows.net/common", que é a autoridade URL de um cenário de vários locatários. Um método de descobrir é o grande responsável dinamicamente no tempo de execução mais adiante neste tópico.

Código da seguinte linha é o resultado de autenticação que contém o token de acesso que está procurando. É possível enviar mensagens de solicitações ao serviço Web. esse token com

Alguns outros itens em nome desse código são valores de cadeia de caracteres usados. A variável de recurso contém o endereço raiz de Transport Layer Security (TLS) ou Secure Sockets Layer (SSL), incluído o domínio (organização), de seu servidor Dynamics 365. As variáveis clientId e redirectUrl contêm as informações de registro do aplicativo que é o resultado do registro do aplicativo com Active Directory. Para obter mais informações sobre o registro do aplicativo, consulte Passo a passo: Registrar o aplicativo Dynamics 365 com Ative Directory do Azure.

Usar token de acesso da mensagem em solicitações

Dependendo do API do Dynamics 365 que você está usando, há dois métodos diferentes para enviar uma solicitação de mensagem aos serviços Web. Para o API da Web, você geralmente enviaria uma solicitação de mensagem do HTTP. Para serviço da organização, você enviaria solicitação do proxy de mensagem usando o cliente web.

Solicitação de mensagem HTTP

Depois de ter um token de acesso, você deve definir o cabeçalho de autorização da solicitação de mensagem que você está enviando ao serviço Web ao valor do token de acesso e especificar o tipo de token de “ Bearer”. Para mais informações sobre o cabeçalho de autorização, consulte a seção 14.8 do protocolo HTTP/1.1. O diagrama a seguir demonstra como esse código é feito usando a classe System.Net.Http.HttpClient.

using (HttpClient httpClient = new HttpClient())
{
    httpClient.Timeout = new TimeSpan(0, 2, 0);  // 2 minutes
    httpClient.DefaultRequestHeaders.Authorization = 
        new AuthenticationHeaderValue("Bearer", result.AccessToken);

Solicitações de cliente Web

Defina o valor da propriedade HeaderToken para acessar o token ao usar OrganizationWebProxyClient ou DiscoveryWebProxyClient do serviço de organização.

Atualizar o token de acesso

É uma prática recomendada para atualizar o token de acesso antes de cada chamada de um método de serviço Web Dynamics 365. Isso é uma solução alternativa para escrever o código que verifica a data e tempo de validade de token de acesso e atualiza o token quando está prestes a vencer.

Para atualizar o token de acesso, que está em cachê por ADAL, você pode simplesmente chamar o método AcquireToken novamente usando o mesmo contexto.

AuthenticationResult result = authContext.AcquireToken(resource, clientId, new Uri(redirectUrl));

Depois disso, você define novamente o cabeçalho de autorização com result.AccessToken ao usar o API da Web, ou o HeaderToken ao usar o serviço de organização.

httpClient.DefaultRequestHeaders.Authorization = 
    new AuthenticationHeaderValue("Bearer", result.AccessToken);

Descubra o grande responsável em tempo de execução

A autoridade de autenticação URL, e o recurso URL, podem ser determinados de forma dinâmica no momento de execução usando o código ADAL a seguir. Este é o método recomendada para usar comparado a autoridade conhecida URL exibido previamente em um trecho do código.

AuthenticationParameters ap = AuthenticationParameters.CreateFromResourceUrlAsync(
                        new Uri("https://mydomain.crm.dynamics.com/api/data/")).Result;

String authorityUrl = ap.Authority;
String resourceUrl  = ap.Resource;

Para o API Web, outro jeito de obter a autoridade URL é enviar qualquer solicitação de mensagem para o serviço Web especificando nenhum acesso ao token. Isso é conhecido como desafio de portador. A resposta pode ser analisado para obter a autoridade URL.

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", “”);

Confira Também

Passo a passo: Registrar o aplicativo Dynamics 365 com Ative Directory do Azure
Documentação do fator de autenticação
OAuth 2.0

Microsoft Dynamics 365

© 2017 Microsoft. Todos os direitos reservados. Direitos autorais