Java Service Bus共享访问令牌

时间:2016-03-20 16:20:28

标签: java azure azureservicebus

Configuration config =
                ServiceBusConfiguration.configureWithSASAuthentication(
                        URL,
                        "RootManageSharedAccessKey",
                        token,
                        ".servicebus.windows.net"
                );

这是java服务总线实现的配置代码。我有兴趣传递共享访问签名而不是共享访问密钥。我不确定java azure sdk的这个实现是否支持这个。我究竟该怎么做呢当我在令牌变量中使用共享访问签名令牌时,我不断收到401未经授权的错误。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

根据Azure Service Bus SDK for Java的source code,函数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;SharedAccessKey=ABCdefg123!@#=,则namespacesasKeyNamesasKey分别为abc-nsRootManageSharedAccessKey,{ {1}}。

所以代码应如下所示。

ABCdefg123!@#=

您也可以在服务总线页面的Configuration config = ServiceBusConfiguration.configureWithSASAuthentication( "abc-ns", "RootManageSharedAccessKey", "ABCdefg123!@#=", ".servicebus.windows.net" ); 标签中找到它们,请参阅下图。

图3. CONFIGURE标签 enter image description here

答案 1 :(得分:0)

我可以看到你在这里创建了一个Configuration对象。通常我们使用它来创建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所展示的那样。