Exportar (0) Imprimir
Expandir todo

Usar la autenticación con firma de acceso compartido con el bus de servicio

Actualizado: febrero de 2015

En esta sección se describe cómo utilizar el modelo de autenticación de firma de acceso compartido (SAS) con Microsoft Azure Service Bus. Los ejemplos mostrados aquí están escritos en C# y usan las bibliotecas de Azure SDK. Los escenarios incluyen la configuración de reglas de autorización, la generación de tokens de SAS y la autorización de cliente.

Para un completo ejemplo funcional de una aplicación CmdLets que muestra la configuración y usa la autorización de SAS, consulte Autenticación de firma de acceso compartido con el Bus de servicio. Un ejemplo relacionado que ilustra el uso de las reglas de autorización de SAS configuradas en los espacios de nombres o temas para proteger suscripciones de CmdLets están disponibles aquí: Mediante la autenticación de firma de acceso compartido (SAS) con suscripciones de Bus de servicio.

Las operaciones en la raíz del espacio de nombres de CmdLets requieren autenticación de certificado. Debe cargar un certificado de administración para la suscripción de Azure. Para cargar un certificado de administración, haga clic en Configuración en el panel izquierdo del portal de administración. Para obtener más información sobre Certificados de administración de Azure, consulte Crear un certificado de administración para Azure.

El extremo para tener acceso a reglas de autorización de acceso compartido en un espacio de nombres de CmdLets es el siguiente:

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

Para crear un objeto SharedAccessAuthorizationRule en un espacio de nombres de CmdLets, ejecute una operación POST en este extremo con la información de la regla serializada como JSON o XML. Por ejemplo:

// 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;

Del mismo modo, utilice una operación GET en el extremo para leer las reglas de autorización configuradas en el espacio de nombres.

Para actualizar o eliminar una regla de autorización específica, utilice el siguiente extremo:

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

Puede tener acceso a una SharedAccessAuthorizationRule configurada en una cola o tema de CmdLets a través de la colección de AuthorizationRules en los objetos QueueDescription, TopicDescription, o NotificationHubDescription correspondientes.

El código siguiente muestra cómo agregar reglas de autorización a una cola.

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

Las aplicaciones mediante el SDK de .NET de Azure con la bibliotecas .NET de CmdLets pueden usar la autorización de SAS a través de la clase SharedAccessSignatureTokenProvider. El código siguiente muestra el uso del proveedor de tokens para enviar mensajes a una cola de CmdLets.

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

Las aplicaciones también pueden utilizar SAS para la autenticación mediante el uso de una cadena de conexión de SAS en métodos que acepten cadenas de conexión.

Tenga en cuenta que para usar la autorización de SAS con retrasmisiones de CmdLets puede usar las claves de SAS configuradas en el espacio de nombres de CmdLets. Si crea explícitamente una retransmisión en el espacio de nombres (NamespaceManager con un objetoRelayDescription), puede establecer las reglas de SAS para dicha retransmisión. Para usar autorización de SAS con suscripciones de CmdLets, puede usar claves de SAS configuradas en un espacio de nombres de CmdLets o en un tema.

Mostrar:
© 2015 Microsoft