Autenticando solicitações do gerenciamento de serviços

Atualizado: junho de 2015

As solicitações para o serviço de gerenciamento devem ser autenticadas usando um dos seguintes métodos:

As solicitações seguras para o serviço de gerenciamento podem ser autenticadas criando um aplicativo AD do Azure e usando a Active Directory Authentication Library para obter um token de acesso do aplicativo. Para obter mais informações sobre autenticação usando o Azure AD, consulte Cenários de Autenticação para o Azure AD.

Faça o seguinte para adicionar um aplicativo do Azure AD:

  1. Entre no Portal de Gerenciamento do Azure.

  2. Na parte inferior do menu à esquerda, clique em Active Directory e clique em Diretório padrão.

  3. Na página Diretório padrão, em Integrar aplicativos, clique em Adicionar um aplicativo que você está desenvolvendo.

    Adicionar aplicativo do AD do Azure
  4. Digite o nome do aplicativo, selecione APLICATIVO CLIENTE NATIVO e clique na seta à direita.

    Forneça um nome para o aplicativo
  5. Insira um URI para o aplicativo e clique na marca de seleção. O URI inclui o nome do aplicativo que é precedido por http://localhost/.

    Inserir a URL de redirecionamento
  6. Depois que o aplicativo é criado, você deve adicionar a permissão para que o aplicativo acesse as APIs de Gerenciamento de Serviços. Vá para a página do seu aplicativo e clique em Configurar.

  7. Na seção Permissões para outros aplicativos na parte inferior da página de configuração, clique em Selecionar aplicativo e selecione API de Gerenciamento de Serviços do Windows Azure.

    Atribuir permissões ao aplicativo
  8. Clique em Permissões delegadas: 0 e selecione Acesso de Gerenciamento de Serviços do Azure.

    Continuar a definição de permissões
  9. Clique em Salvar no menu inferior.

Você pode instalar facilmente o Active Directory Authentication Library em seu projeto do Visual Studio usando o pacote NuGet. Para instalar o pacote, faça o seguinte:

  1. Clique no nome do projeto no Gerenciador de Soluções e clique em Gerenciar Pacotes NuGet.

    Gerenciar pacotes NuGet
  2. Digite Active Directory na caixa de pesquisa, clique em Instalar para o pacote Biblioteca de Autenticação do Active Directory e siga as instruções para instalar o pacote.

    Instalar a biblioteca do Active Directory

O exemplo de código a seguir mostra como transferir o token de acesso:


private static string GetAuthorizationHeader()
{
  AuthenticationResult result = null;
  
  var context = new AuthenticationContext("https://login.windows.net/{tenantId}");

  var thread = new Thread(() =>
  {
    result = context.AcquireToken(
      "https://management.core.windows.net/",
      "{clientId}",
      new Uri("{redirectUri}"));
  });

  thread.SetApartmentState(ApartmentState.STA);
  thread.Name = "AquireTokenThread";
  thread.Start();
  thread.Join();
            
  if (result == null)
  {
    throw new InvalidOperationException("Failed to obtain the JWT token");
  }

  string token = result.AccessToken;
  return token;
}

Quando você usa o código listado acima, você precisa substituir o seguinte:

  • {tenantId} com o GUID do aplicativo. Para localizar o GUID, vá para a página Diretório padrão na seção Active Directory do Portal de Gerenciamento, selecione o aplicativo que você criou anteriormente e clique em Exibir pontos de extremidade.

    Exibir pontos de extremidade

    Copie o GUID do aplicativo e substitua o espaço reservado com ele.

    Copiar o ponto de extremidade do aplicativo
  • {clientId} com o identificador do cliente. Para localizar o identificador do cliente, vá para a página de Configuração do aplicativo no Portal de Gerenciamento.

    Copiar ID do cliente do AD
  • {redirectUri} com o Uri de redirecionamento. Para localizar o Uri de redirecionamento, vá para a página de Configuração do aplicativo no Portal de Gerenciamento.

    Copiar a URI de redirecionamento do aplicativo

Use a seguinte linha de código para atribuir o token que é retornado do método GetAuthorizationHeader mostrado acima para uma variável que pode ser usada pela solicitação:

string token = GetAuthorizationHeader();

Use as seguintes linhas de código para adicionar o token a uma solicitação:


HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + token);

As solicitações seguras para o serviço de gerenciamento podem ser autenticadas usando certificados de gerenciamento sobre SSL. Para usar um certificado de gerenciamento, ele deve ser carregado no Azure. Depois de adicionar um certificado de gerenciamento para a assinatura, você pode assinar as solicitações para o serviço usando o certificado. Para obter informações sobre como criar certificados de gerenciamento e associá-los a uma assinatura, consulte Criar e carregar um certificado de gerenciamento para o Azure.

Ao criar um aplicativo, tenha os seguintes pontos sobre certificados de gerenciamento em mente:

  • A API de gerenciamento de serviço não verifica se um certificado ainda é válido. A autenticação terá êxito em um certificado expirado.

  • Todos os certificados de gerenciamento carregam o mesmo conjunto de privilégios. Não há nenhuma noção de autenticação "baseada em função" onde um certificado de gerenciamento possa ser configurado em uma função e outro na mesma assinatura seja configurada em uma função diferente.

O exemplo a seguir mostra como recuperar o certificado de gerenciamento usando as bibliotecas System.Net e System.Security.Cryptography.X509Certificates:


private static X509Certificate2 GetStoreCertificate(string thumbprint)
{
  List<StoreLocation> locations = new List<StoreLocation>
  { 
    StoreLocation.CurrentUser, 
    StoreLocation.LocalMachine
  };

  foreach (var location in locations)
  {
    X509Store store = new X509Store("My", location);
    try
    {
      store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
      X509Certificate2Collection certificates = store.Certificates.Find(
        X509FindType.FindByThumbprint, thumbprint, false);
      if (certificates.Count == 1)
      {
        return certificates[0];
      }
    }
    finally
    {
      store.Close();
    }
  }
  throw new ArgumentException(string.Format(
    "A Certificate with Thumbprint '{0}' could not be located.",
    thumbprint));
}

Use a seguinte linha de código para atribuir o certificado que é retornado do método GetStoreCertificate mostrado acima para uma variável que pode ser usada pela solicitação:

noteObservação
Thumbprint representa a impressão digital do certificado de gerenciamento que você adicionou à assinatura.


X509Certificate2 certificate = GetStoreCertificate(Thumbprint);

Use as seguintes linhas de código para adicionar o certificado a uma solicitação:


HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.ClientCertificates.Add(certificate);

Mostrar: