匯出 (0) 列印
全部展開
本主題尚未接受評分 - 為這個主題評分

如何使用服務匯流排的共用存取簽章驗證

本節說明如何透過 Windows Azure 服務匯流排 使用共用存取簽章 (SAS) 驗證模型。此處顯示的範例均以 C# 撰寫,並使用 Windows Azure SDK (.NET 版本 2.0)。案例包括授權規則的組態、產生 SAS 權杖以及用戶端授權。

如需完整的說明組態和使用 SAS 授權的 服務匯流排 應用程式工作範例,請參閱 使用服務匯流排的共用存取簽章驗證。您可以在這裡取得相關範例,說明使用在命名空間或主題上設定的 SAS 授權規則以保護 服務匯流排 訂閱:使用共用存取簽章 (SAS) 驗證 Service Bus 訂閱

在命名空間中存取共用存取授權規則

在 服務匯流排 命名空間根中的操作需要驗證憑證。您必須上傳 Windows Azure 訂閱的管理憑證。若要上傳管理憑證,請按一下 Windows Azure 管理入口網站 左側窗格中的 [設定]。如需詳細資訊 Windows Azure 管理憑證,請參閱建立 Windows Azure 管理憑證

存取位於 服務匯流排 命名空間上的共用存取授權規則端點如下所示:

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

若要在 服務匯流排 命名空間中建立 SharedAccessAuthorizationRule 物件,請在此端點上利用序列化為 JSON 或 XML 的規則資訊來執行 POST。例如:

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

同樣地,在端點上使用 GET 操作來讀取命名空間上設定的授權規則。

若要更新或刪除特定授權規則,請使用以下端點:

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

在實體中存取共用存取授權規則

您可以透過相對應的 QueueDescriptionTopicDescriptionNotificationHubDescription 物件中的 AuthorizationRules 集合,存取在 服務匯流排 佇列、主題或通知中心上設定的 SharedAccessAuthorizationRule

note附註
服務匯流排通知中心目前包括在發行前版本中,預計在 2013 年年中會轉換為一般功能。如需詳細資訊,請參閱 Service Bus Push Notifications

下列程式碼顯示如何新增佇列授權規則。

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

使用共用存取簽章授權

透過 服務匯流排 .NET 程式庫使用 Windows Azure .NET SDK 的應用程式可以透過 SharedAccessSignatureTokenProvider 分類使用 SAS 授權。下列程式碼說明使用權杖提供者傳送訊息到 服務匯流排 佇列。

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

應用程式也可使用 SAS 進行驗證,方法是在接受連線字串的方法中使用 SAS 連線字串。

請注意若要透過 服務匯流排 轉送使用 SAS 授權,您可以使用在 服務匯流排 命名空間中設定的 SAS 金鑰。在不久的未來會支援在轉送上設定 SAS 授權規則的功能。同樣地,若要透過 服務匯流排 訂閱使用 SAS 授權,您可以使用在 服務匯流排 命名空間或主題中設定的 SAS 金鑰。

本文對您有任何幫助嗎?
(剩餘 1500 個字元)
感謝您提供意見

社群新增項目

新增
顯示:
© 2014 Microsoft. 著作權所有,並保留一切權利。