Search code examples
node.jsazureazure-servicebus-queuesazure-node-sdk

Azure ServiceBus Token Expired


I am accessing Azure ServiceBus using NodeJS and it worked fine for several days. All of a sudden, I started receiving an error

Subscription Deletion Error :Error: 401 - ExpiredToken: . TrackingId:xxxxxx-xxxxxxx,TimeStamp:4/8/2015 12:32:54 PM

I am using the connection string to connect to ServiceBus

var azure = require('azure');

var serviceBusConnectionString = "Endpoint=sb://somens.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=mykey";

var serviceBusService = azure.createServiceBusService(serviceBusConnectionString);

var rule = {
    deleteDefault: function () {
        serviceBusService.deleteRule(topicName,
            subscriptionName,
            azure.Constants.ServiceBusConstants.DEFAULT_RULE_NAME,
            rule.handleError);
    },
    create: function () {
        var ruleOptions = {
            sqlExpressionFilter: subscriptionCriteria
        };
        rule.deleteDefault();
        serviceBusService.createRule(topicName,
            subscriptionName,
            filterName,
            ruleOptions,
            rule.handleError);
    },
    handleError: function (error) {
        if (error) {
            console.log(error);
        }
    }
} //rule


serviceBusService.deleteSubscription(topicName, subscriptionName, function (error) {
    if (error) {
        console.log("Subscription Deletion Error :" + error);
        createMessageSubscription();
    }
    else {
        console.log('Subscription deleted : ' + subscriptionName);
        createMessageSubscription();
    }
}); //deleteSubscription

There is only one Shared Access Policy 'RootManageSharedAccessKey' with permissions to 'Manage, Send, Listen'

What could be wrong in this?


Solution

  • OK, this problem comes when the time on the machine is older than the current time.

    Fix:

    sudo service ntp stop sudo ntpdate -s time.nist.gov sudo service ntp start

    If you want to put this in /etc/rc.local use the following:

    ( /etc/init.d/ntp stop until ping -nq -c3 8.8.8.8; do echo "Waiting for network..." done ntpdate -s time.nist.gov /etc/init.d/ntp start )&

    That should update the time on boot and then the Azure error on expired token will not be thrown