エクスポート (0) 印刷
すべて展開

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

このセクションでは、Windows Azure Service Bus での共有アクセス署名 (SAS) 認証モデルの使用方法について説明します。ここに記載のサンプルは C# で記述されており、Windows Azure SDK (.NET バージョン 2.0) を使用しています。シナリオには、認証規則の構成、SAS トークンの生成、クライアント認証が含まれます。

構成を示し、SAS 認証を使用した Service Bus アプリケーションの完全なサンプルについては、「Shared Access Signature authentication with Service Bus (Service Bus での共有アクセス署名認証)」を参照してください。名前空間で構成された SAS 認証規則の使用を説明するサンプル、または Service Bus サブスクリプションを確保するトピックについては、「Using Shared Access Signature (SAS) authentication with Service Bus Subscriptions (Service Bus での共有アクセス署名認証)」を参照してください。

名前空間の共有アクセス認証規則へのアクセス

Service Bus 名前空間のルートにおける操作には、証明書による認証が必要です。Windows Azure サブスクリプションの管理証明書をアップロードする必要があります。管理証明書をアップロードするには、Windows Azure 管理ポータル の左ペインにある [設定] をクリックします。詳細情報: Windows Azure の管理証明書については、「Create a Management Certificate for Windows Azure (Windows 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}

エンティティの共有アクセス認証規則へのアクセス

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

note
Service Bus 通知ハブは現在プレリリース版であり、2013 年の中ごろには General Availability に移行する予定です。詳細については、次のトピックを参照してください。 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);

共有アクセス署名 (SAS) 認証の使用

Service Bus .NET ライブラリとともに Windows 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 キーを使用することもできます。リレーにおける SAS 認証規則の構成のサポートは間もなく追加される予定です。同様に、Service Bus サブスクリプションで SAS 認証を使用する場合は、Service Bus 名前空間またはトピックで構成されている SAS キーを使用することもできます。

コミュニティの追加

表示:
© 2014 Microsoft