首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure ServiceBus无效签名

Azure ServiceBus无效签名
EN

Stack Overflow用户
提问于 2018-11-08 17:14:37
回答 1查看 1.8K关注 0票数 0

我创建一个使用共享-访问-签名 npm模块生成的SAS令牌。当我试图使用Azure连接到servicebus时,我会得到以下错误。

代码语言:javascript
复制
com.microsoft.azure.servicebus.primitives.ServiceBusException: 
Error{condition=com.microsoft:auth-failed, description='InvalidSignature:
The token has an invalid signature.', info=null}

我的SAS令牌如下所示

代码语言:javascript
复制
SharedAccessSignature sr=https%3A%2F%2Fmy-servicebus-dev.servicebus.windows.net%2F&sig=somesig%2idonotdisclose0e1g%3D&se=1541700607.155&skn=RootManageSharedAccessKey

应该如何使用SAS令牌?是整个字符串还是只包括SharedAccessSignature以外的部分?

请帮帮忙。我已经没有线索了。

EN

回答 1

Stack Overflow用户

发布于 2018-11-09 03:07:31

应该如何使用SAS令牌?是整个字符串还是只包括SharedAccessSignature以外的部分?

根据我的测试,答案是肯定的。您需要将参数作为一个整体字符串传递,包括SharedAccessSignature sr=

我用您提供的npm生成sas令牌。

代码语言:javascript
复制
var sas = require('shared-access-signature');

var url = 'https://******.servicebus.windows.net/BasicQueue';
var sharedAccessKeyName = 'RootManageSharedAccessKey';
var sharedAccessKey = '***';
var currentDate = new Date();
var expiry = currentDate.getTime() / 1000 + 3600; // We require expiry time in seconds since epoch.

var sas = require('shared-access-signature');
var signature = sas.generateServiceBusSignature(url, sharedAccessKeyName, sharedAccessKey, expiry);
console.log(signature);

然后在下面的Java代码中使用它:

代码语言:javascript
复制
import com.microsoft.azure.servicebus.Message;
import com.microsoft.azure.servicebus.QueueClient;
import com.microsoft.azure.servicebus.ReceiveMode;
import com.microsoft.azure.servicebus.primitives.ConnectionStringBuilder;
import com.microsoft.azure.servicebus.primitives.ServiceBusException;
public class SendMessages {
    private static String entityPath = "BasicQueue";

    private static String namespaceName = "***";

    private static String sharedAccessSingature = "SharedAccessSignature sr=https%3A%2F%2F***.servicebus.windows.net%2FBasicQueue&sig=ewu7ZwgPgDVSHBZiYB7paBp94KuMtby%2BiwK0fDJ5GLM%3D&se=1541735153.139&skn=RootManageSharedAccessKey";


    public static void main(String[] args) throws ServiceBusException, InterruptedException {

        QueueClient sendClient = new QueueClient(new ConnectionStringBuilder(namespaceName, entityPath, sharedAccessSingature), ReceiveMode.PEEKLOCK);

        String test = "test for 111";

        Message message = new Message(test);

        sendClient.sendAsync(message).thenRunAsync(() -> {
            System.out.printf("\n\tMessage acknowledged: Id = %s", message.getMessageId());
        });

        System.out.println("send success");
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53212910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档