【问题标题】:SAS token fails when upgrading from ServiceBus 3.4.3 to 4.1.3从 ServiceBus 3.4.3 升级到 4.1.3 时 SAS 令牌失败
【发布时间】:2018-03-26 20:06:44
【问题描述】:

我刚刚尝试升级到 serviceBus 版本 4.1.3,现在我的 SAS 生成令牌失败。我正在使用这些令牌连接服务总线中的 WCF 中继。

我得到的错误是“超时间隔必须小于 2^32-2”

令牌肯定适用于 3.4.3 版本。

当我生成令牌时,我计算的 timeToLive 介于 1970 年和 3000 年之间。我相信这是我的问题,因为如果我将其设置为较低的值,我可以生成有效的新令牌(10 天)。这对我不起作用,因为我需要不会过期的令牌。

现在有人知道timeToLive 是如何工作的吗?最大值是多少,是否有任何解决方法可以让我继续使用我的 SAS 令牌。它们已经生成并在现场 - 因此重新生成它们将很困难。

我使用的代码如下:

Dim TimeToLive = TimeSpan.FromDays(365) 'This will fail    
Dim serviceUri = ServiceBusEnvironment.CreateServiceUri("https",
     serviceNamespace,
     servicePath).ToString().Trim("/")

Dim sasKey As String = SharedAccessSignatureTokenProvider.GetSharedAccessSignature(
     SharedAccessKeyName,
     SharedAccessKeyPrimary,
     serviceUri,
     TimeToLive)

生成的sasKey在使用时会失败。如果我将 TTL 设置为 10 天,它会起作用。

感谢您的帮助

【问题讨论】:

    标签: azureservicebus servicebus azure-servicebusrelay


    【解决方案1】:

    根据你的描述,我这边也做了一个测试demo。效果很好。

    我使用的是 WindowsAzure.ServiceBus 4.1.3。

    我的代码如下:

    Sub Main()
    
        Dim serviceNamespace = " "
        Dim servicePath = " "
        Dim SharedAccessKeyName = " "
        Dim SharedAccessKeyPrimary = " "
        Dim TimeToLive = TimeSpan.FromDays(365) 'This will fail    
        Dim serviceUri = ServiceBusEnvironment.CreateServiceUri("https",
             serviceNamespace,
             servicePath).ToString().Trim("/")
        Dim sasKey As String = SharedAccessSignatureTokenProvider.GetSharedAccessSignature(
             SharedAccessKeyName,
             SharedAccessKeyPrimary,
             serviceUri,
             TimeToLive)
        Dim mfSettings As New MessagingFactorySettings()
        mfSettings.TransportType = TransportType.NetMessaging
        mfSettings.TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(sasKey)
        Dim mf As MessagingFactory = MessagingFactory.Create("sb://serviceNamespace.servicebus.windows.net", mfSettings)
        ' Create Client
        Dim client As QueueClient = mf.CreateQueueClient(servicePath)
    
        Dim message = New BrokeredMessage("test")
    
    
    
        client.Send(message)
    
    End Sub
    

    结果:

    我向它添加了八条消息。

    【讨论】:

      【解决方案2】:

      你已经连接了一个队列,如果你要连接一个 wcf 中继你会发现它不起作用。

      查看 Microsoft 的回复 我从产品团队那里得知,他们建议这是 4.1.3 版本中的设计行为。该更改是 PM 和管理团队基于应定期重新请求 SAS 令牌的理解做出的决定。但是,这将在下一个版本中再次更改,其中将再次支持更长的到期时间。很遗憾未能为您提供快速解决方案。

      【讨论】:

        猜你喜欢
        • 2017-03-14
        • 1970-01-01
        • 1970-01-01
        • 2011-10-27
        • 1970-01-01
        • 1970-01-01
        • 2015-09-15
        • 2016-02-06
        • 1970-01-01
        相关资源
        最近更新 更多