このページは役に立ちましたか。
このページのコンテンツについての ご意見をお待ちしております
その他にご意見はありますか。
残り 1500 文字
エクスポート (0) 印刷
すべて展開

Service Bus での共有アクセス署名認証の使用方法

更新日: 2015年6月

このセクションでは、Microsoft Azure の Service Bus で、Shared Access Signature (SAS) 認証モデルを使用する方法について説明します。ここに示すサンプルは C# で記述されており、Azure SDK ライブラリを使用します。シナリオには、承認規則の構成、SAS トークンの生成、およびクライアントの認証が含まれます。

構成を説明し、SAS 認証を使用する Service Bus アプリケーションの完全に動作するサンプルについては、「Service Bus による共有アクセス署名認証」を参照してください。名前空間に構成された SAS 認証規則の使用を示す関連のサンプル、または Service Bus サブスクリプションをセキュリティ保護するためのトピックについては、「Service Bus サブスクリプションによる共有アクセス署名 (SAS) 認証の使用」を参照してください。

Service Bus 名前空間のルートの操作には、証明書認証が必要です。Azure サブスクリプションの管理証明書をアップロードする必要があります。管理証明書をアップロードするには、管理ポータルの左側のウィンドウの [設定] をクリックします。Azure の管理証明書の詳細情報、「Azure の管理証明書の作成とアップロード」を参照してください。

Service Bus 名前空間の共有アクセス認証規則にアクセスするためのエンドポイントは、次のようになります。

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

Service Bus 名前空間に 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}

対応するQueueDescriptionTopicDescription、またはNotificationHubDescription オブジェクトの AuthorizationRules コレクション経由で、Service Bus キューまたはトピックに構成されている SharedAccessAuthorizationRule にアクセスできます。

次のコードは、キューの認証規則を追加する方法を示します。

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

Service Bus .NET ライブラリと Azure .NET SDK を使用するアプリケーションでは、SharedAccessSignatureTokenProvider クラス経由で、SAS 認証を使用できます。次のコードは、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);

アプリケーションは、接続文字列を受け入れるメソッドで SAS 接続文字列を使用して、認証に SAS を使用することもできます。

Service Bus リレーで SAS 認証を使用するには、Service Bus 名前空間に構成されている SAS キーを使用できることに注意してください。名前空間オブジェクトにリレーを明示的に作成する (NamespaceManagerRelayDescription) 場合は、そのリレーについてのみ SAS 規則を設定できます。Service Bus サブスクリプションで SAS 認証を使用するには、Service Bus 名前空間またはトピックに構成されている SAS キーを使用できます。

表示:
© 2015 Microsoft