Exportar (0) Imprimir
Expandir Tudo

Como usar a autenticação SAS com o Service Bus

Esta seção descreve como usar o modelo de autenticação SAS (Assinatura de Acesso Compartilhado) com o Windows Azure Service Bus. As amostras exibidas aqui são gravadas em C# e utilizam o Windows Azure SDK (.NET versão 2.0). Os cenários incluem configuração de regras de autorização, geração de tokens SAS e autorização de cliente.

Para obter uma amostra funcional completa de um aplicativo do Service Bus que ilustra a configuração e utiliza a autorização SAS, consulte Autenticação SAS com o Service Bus. Um exemplo relacionado que ilustra o uso de regras de autorização SAS configuradas em namespaces ou tópicos para proteger assinaturas do Service Bus estão disponíveis aqui: Usar a autenticação de SAS (Assinatura de Acesso Compartilhado) com assinaturas do Service Bus.

Acessar regras de autorização de acesso compartilhado em um namespace

Operações na raiz do namespace do Service Bus requerem autenticação de certificados. É necessário carregar um certificado de gerenciamento para a assinatura do Windows Azure. Para carregar um certificado de gerenciamento, clique em Configurações na lateral esquerda do painel do Portal de gerenciamento do Windows Azure. Para obter mais informações sobre Certificados de gerenciamento do Windows Azure, consulte Criar um certificado de gerenciamento para Windows Azure.

O ponto de extremidade para acessar as regras de acesso compartilhado em um namespace Service Bus é o seguinte:

https://management.core.windows.net/{subscriptionId}/services/ServiceBus/namespaces/{namespace}/AuthorizationRules/

Para criar um objeto SharedAccessAuthorizationRule em um namespace do Service Bus, execute uma operação POST nesse ponto de extremidade com as informações de regra serializadas como JSON ou XML. Por exemplo:

// Base address for accessing authorization rules on a namespace
string baseAddress = @"https://management.core.windows.net/<subscriptionId>/services/ServiceBus/namespaces/<namespace>/AuthorizationRules/";

// Configure authorization rule with base64-encoded 256-bit key and Send rights
var sendRule = new SharedAccessAuthorizationRule("contosoSendAll",
    SharedAccessAuthorizationRule.GenerateRandomKey(),
    new[] { AccessRights.Send });

// Operations on the Service Bus namespace root require certificate authentication.
WebRequestHandler handler = new WebRequestHandler
{
    ClientCertificateOptions = ClientCertificateOption.Manual
};
// Access the management certificate by subject name
handler.ClientCertificates.Add(GetCertificate(<certificateSN>));

HttpClient httpClient = new HttpClient(handler)
{
    BaseAddress = new Uri(baseAddress)
};
httpClient.DefaultRequestHeaders.Accept.Add(
    new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Add("x-ms-version", "2012-03-01");

// Execute a POST operation on the baseAddress above to create an auth rule
var postResult = httpClient.PostAsJsonAsync("", sendRule).Result;

Da mesma maneira, utilize uma operação GET no ponto de extremidade para ler as regras de autorização configuradas no namespace.

Para atualizar ou excluir uma regra de autorização específica, use o seguinte ponto de extremidade:

https://management.core.windows.net/{subscriptionId}/services/ServiceBus/namespaces/{namespace}/AuthorizationRules/{KeyName}

Acessar regras de autorização de acesso compartilhado em uma entidade

É possível acessar um SharedAccessAuthorizationRule configurado em uma fila, tópico ou hub de notificação do Service Bus por meio do conjunto AuthorizationRules nos objetos QueueDescription, TopicDescription ou NotificationHubDescription correspondentes.

noteObservação
Os hubs de notificação do Service Bus estão em pré-lançamento atualmente e espera-se a disponibilidade geral em meados de 2013. Para obter mais informações, consulte Service Bus Push Notifications.

O código a seguir mostra como adicionar regras de autorização para uma fila.

// Create an instance of NamespaceManager for the operation
NamespaceManager nsm = NamespaceManager.CreateFromConnectionString( 
    <connectionString> );
QueueDescription qd = new QueueDescription( <qPath> );

// Create a rule with send rights with keyName as "contosoQSendKey"
// and add it to the queue description.
qd.Authorization.Add(new SharedAccessAuthorizationRule("contosoSendKey", 
    SharedAccessAuthorizationRule.GenerateRandomKey(), 
    new[] { AccessRights.Send }));

// Create a rule with listen rights with keyName as "contosoQListenKey"
// and add it to the queue description.
qd.Authorization.Add(new SharedAccessAuthorizationRule("contosoQListenKey",
    SharedAccessAuthorizationRule.GenerateRandomKey(),
    new[] { AccessRights.Listen }));

// Create a rule with manage rights with keyName as "contosoQManageKey"
// and add it to the queue description.
// A rule with manage rights must also have send and receive rights.
qd.Authorization.Add(new SharedAccessAuthorizationRule("contosoQManageKey",
    SharedAccessAuthorizationRule.GenerateRandomKey(),
    new[] {AccessRights.Manage, AccessRights.Listen, AccessRights.Send }));

// Create the queue.
nsm.CreateQueue(qd);

Usar a autorização SAS

Os aplicativos usando o Windows Azure .NET SDK com bibliotecas .NET do Service Bus podem usar autorização SAS via classe SharedAccessSignatureTokenProvider. O código a seguir ilustra o uso do fornecedor de token para enviar mensagens a uma fila do Service Bus.

Uri runtimeUri = ServiceBusEnvironment.CreateServiceUri("sb", 
    <serviceNamespace>, string.Empty);
MessagingFactory mf = MessagingFactory.Create(runtimeUri, 
    TokenProvider.CreateSharedAccessSignatureTokenProvider(keyName, key));
QueueClient sendClient = mf.CreateQueueClient(qPath);

//Sending hello message to queue.
BrokeredMessage helloMessage = new BrokeredMessage("Hello, Service Bus!");
helloMessage.MessageId = "SAS-Sample-Message";
sendClient.Send(helloMessage);

Os aplicativos também podem usar SAS para autenticação ao utilizar uma cadeia de caracteres de conexão SAS nos métodos que aceitem cadeias de caracteres de conexão.

Observe que ao usar a autorização SAS com retransmissões de Service Bus, é possível utilizar chaves SAS configuradas no namespace do Service Bus. O suporte para configurar regras de autorização SAS em uma retransmissão será adicionado em breve. Da mesma maneira, para usar uma autorização SAS com as assinaturas do Service Bus, é possível utilizar chaves SAS configuradas em um namespace ou tópico do Service Bus.

Contribuições da comunidade

Mostrar:
© 2014 Microsoft