2016-03-20 23 views
0
Configuration config = 
       ServiceBusConfiguration.configureWithSASAuthentication(
         URL, 
         "RootManageSharedAccessKey", 
         token, 
         ".servicebus.windows.net" 
       ); 

這是用於配置java服務總線實現的代碼。我感興趣的是傳遞共享訪問簽名而不是共享訪問密鑰。我不確定這個java azure sdk的實現是否支持這個。我該如何做到這一點。當我在令牌變量中使用共享訪問簽名令牌時,我總是收到401未授權的錯誤。有任何想法嗎?Java服務總線共享訪問令牌

回答

2

據Azure的服務總線SDK的source code對Java的四個參數的函數configureWithSASAuthentication應該是namespacesasKeyNamesasKey & serviceBusRootUri(默認通 「.servicebus.windows.net」)。

namespacesasKeyName & sasKey,您可以通過點擊找到他們爲您服務總線的底部CONNECTION INFORMATION按鈕,請看下圖。

圖1. CONNECTION INFORMATION按鈕服務總線頁 enter image description here

圖2.複製底部的CONNECTION STRING並提取命名空間,sasKeyName & sasKey enter image description here

例如,連接字符串是Endpoint=sb://abc-ns.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;[email protected]#=,則namespace,sasKeyName,sasKey分別爲abc-ns,,[email protected]#=

所以代碼應該如下。

Configuration config = 
       ServiceBusConfiguration.configureWithSASAuthentication(
         "abc-ns", 
         "RootManageSharedAccessKey", 
         "[email protected]#=", 
         ".servicebus.windows.net" 
       ); 

而且你也可以爲您服務總線頁的CONFIGURE選項卡中找到他們,請參見下圖。

圖3. CONFIGURE標籤 enter image description here

0

我可以看到你創建的配置對象在這裏。通常我們用它在Java中,以創造一個主題,如:

Configuration config = 
    ServiceBusConfiguration.configureWithSASAuthentication(
     "namespace", 
     "sasKeyName", 
     "sasKey", 
     "serviceBusRootUri" 
    ); 

ServiceBusContract service = ServiceBusService.create(config); 
TopicInfo topicInfo = new TopicInfo("TestTopic"); 
CreateTopicResult result = service.createTopic(topicInfo); 

或創建隊列,如:

Configuration config = 
     ServiceBusConfiguration.configureWithSASAuthentication(
       "namespace", 
       "sasKeyName", 
       "sasKey", 
       "serviceBusRootUri" 
       ); 

ServiceBusContract service = ServiceBusService.create(config); 
QueueInfo queueInfo = new QueueInfo("TestQueue"); 
CreateQueueResult result = service.createQueue(queueInfo); 

而且我們也可以通過共享訪問簽名創建它們: 創建一個話題(C#)

Uri uri = ServiceBusEnvironment.CreateServiceUri("sb", "namespace", string.Empty); 
string name = "sasKeyName"; 
string key = "sasKey"; 

TokenProvider tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(name, key); 

NamespaceManager namespaceManager = new NamespaceManager(uri, tokenProvider); 
namespaceManager.CreateTopic("DataCollectionTopic"); 

創建隊列(C#):

Uri uri = ServiceBusEnvironment.CreateServiceUri("sb", 
       "namespace", string.Empty); 
string name = "sasKeyName"; 
string key = "sasKey"; 

TokenProvider tokenProvider = 
    TokenProvider.CreateSharedAccessSignatureTokenProvider(name, key); 
NamespaceManager namespaceManager = 
    new NamespaceManager(uri, tokenProvider); 
namespaceManager.CreateQueue("DataCollectionQueue"); 

命名空間,sasKeyName,sasKey在門戶中進行配置,就像Perter所示。