Java 服务总线共享访问令牌
Java Service Bus Shared Access Token
Configuration config =
ServiceBusConfiguration.configureWithSASAuthentication(
URL,
"RootManageSharedAccessKey",
token,
".servicebus.windows.net"
);
这是java服务总线实现的配置代码。我有兴趣传递共享访问签名而不是共享访问密钥。我不确定 java azure sdk 的这个实现是否支持这个。我将如何做到这一点。当我在令牌变量中使用共享访问签名令牌时,我不断收到 401 未经授权的错误。有什么想法吗?
根据 Java 的 Azure 服务总线 SDK source code,函数 configureWithSASAuthentication
的四个参数应该是 namespace
、sasKeyName
, sasKey
& serviceBusRootUri
(默认传递 ".servicebus.windows.net").
namespace
、sasKeyName
和sasKey
您可以通过单击服务总线底部的CONNECTION INFORMATION
按钮找到它们,请参见下图。
图1.服务总线页面底部的CONNECTION INFORMATION
按钮
图 2. 复制 CONNECTION STRING
并提取命名空间、sasKeyName 和 sasKey
例如连接字符串为Endpoint=sb://abc-ns.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=ABCdefg123!@#=
,则namespace
、sasKeyName
、sasKey
分别为abc-ns
、RootManageSharedAccessKey
, ABCdefg123!@#=
.
所以代码应该如下所示。
Configuration config =
ServiceBusConfiguration.configureWithSASAuthentication(
"abc-ns",
"RootManageSharedAccessKey",
"ABCdefg123!@#=",
".servicebus.windows.net"
);
您也可以在服务总线页面的 CONFIGURE
选项卡中找到它们,请参见下图。
图 3. CONFIGURE
选项卡
我可以看到你在这里创建了一个配置对象。一般我们用它在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 所展示的那样。
Configuration config =
ServiceBusConfiguration.configureWithSASAuthentication(
URL,
"RootManageSharedAccessKey",
token,
".servicebus.windows.net"
);
这是java服务总线实现的配置代码。我有兴趣传递共享访问签名而不是共享访问密钥。我不确定 java azure sdk 的这个实现是否支持这个。我将如何做到这一点。当我在令牌变量中使用共享访问签名令牌时,我不断收到 401 未经授权的错误。有什么想法吗?
根据 Java 的 Azure 服务总线 SDK source code,函数 configureWithSASAuthentication
的四个参数应该是 namespace
、sasKeyName
, sasKey
& serviceBusRootUri
(默认传递 ".servicebus.windows.net").
namespace
、sasKeyName
和sasKey
您可以通过单击服务总线底部的CONNECTION INFORMATION
按钮找到它们,请参见下图。
图1.服务总线页面底部的CONNECTION INFORMATION
按钮
图 2. 复制 CONNECTION STRING
并提取命名空间、sasKeyName 和 sasKey
例如连接字符串为Endpoint=sb://abc-ns.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=ABCdefg123!@#=
,则namespace
、sasKeyName
、sasKey
分别为abc-ns
、RootManageSharedAccessKey
, ABCdefg123!@#=
.
所以代码应该如下所示。
Configuration config =
ServiceBusConfiguration.configureWithSASAuthentication(
"abc-ns",
"RootManageSharedAccessKey",
"ABCdefg123!@#=",
".servicebus.windows.net"
);
您也可以在服务总线页面的 CONFIGURE
选项卡中找到它们,请参见下图。
图 3. CONFIGURE
选项卡
我可以看到你在这里创建了一个配置对象。一般我们用它在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 所展示的那样。