azure 事件中心错误:放置令牌失败,状态代码:401,状态描述:ExpiredToken

deikduxw  于 2023-05-29  发布在  其他
关注(0)|答案(5)|浏览(160)

我正在开发一个程序,将消息从C#控制台应用程序发送到Azure Event Hub。代码参考链接如下:
参考链接:https://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-dotnet-standard-getstarted-send
在上面的代码中,我得到了异常:放置令牌失败。状态代码:401:您访问的页面不存在我已尝试重新生成主密钥和辅助密钥。以下是连接字符串和实体路径值的格式,如下所示:

请提供解决方案。谢谢。

7bsow1i6

7bsow1i61#

希望还不算太晚!
我有同样的问题,我的问题是,我已经改变了系统时间从设备,连接到事件中心。我把它从7点调到4点。

bvn4nwqk

bvn4nwqk2#

以下可能是一个非常具体的场景。
如果您在Windows中使用Docker运行应用程序时遇到此问题,并且Docker通过WSL 2(而不是HyperV)运行,则仍需要Microsoft解决WSL 2问题:
这是主机操作系统和正在运行的容器之间的时间同步问题。它们基本上有不同的日期/时间,这在通过过期的令牌进行身份验证时会造成麻烦。
当我的笔记本电脑在睡眠/休眠后醒来时发生了这种情况。我使用Docker容器运行我的应用程序。当它试图连接到服务总线时,我开始得到那些未经授权的错误,但只在睡眠模式之后,而不是之前。
有些人说它通过重新启动Docker主机得到了解决。在我的情况下,它只工作重新启动我的电脑。过了一会儿,我发现:
https://github.com/microsoft/WSL/issues/4245
现在我不需要重新启动Windows了,只需运行

wsl --shutdown

修复了在操作系统/容器之间强制时间同步的问题(这也会导致Docker主机重启)。

bxfogqkk

bxfogqkk3#

我在Windows的Docker中运行时也遇到了同样的问题。我重新启动了docker主机,它工作了-不知道为什么

vlju58qv

vlju58qv4#

对我来说,问题是“Put token failed.状态代码:401,状态描述:“未经授权”是由Azure EventHub客户端保留检查点的存储帐户的网络配置导致的。SA和EH都有白名单客户端地址,当我从笔记本电脑运行客户端应用程序时,它可以工作(在代理后面)。但是,当相同的客户端部署到AKS并且通过AKS出口公共IP(即使该IP在SA和EH上被列入白名单)进行动作时,EH接受传入连接,但是SA拒绝它。我不确定AKS pod从哪里触发连接_在SA上没有任何记录的连接尝试。当我让SA接受来自“所有网络”的连接时,问题是“Put token failed”。状态代码:401,状态描述:“未经授权”已经消失了。微软建议将SA部署到另一个区域,以便在不同的区域拥有EH和SA,但我还没有测试它,由于计费流量,我不会。希望这对你有帮助。

svgewumm

svgewumm5#

当你的docker容器中的本地时间不同时,会发生这种情况,要解决这个问题,请检查docker容器中的日期为

  1. docker exec -it /bin/sh 2.#date如果你看到docker中的UTC时间和本地机器中对应的时间不匹配,那么你需要运行一个新的容器副本,如下所示
    命令docker run -d -p -v /etc/localtime:/etc/localtime:ro该命令将与本地机器同步docker容器时间。
    例如docker run -d -p 53238:80 -v /etc/localtime:/etc/localtime:ro aba.azurecr.io/busbasedsolutions:v1
    我已经把一个完整的名称的docker图像,但你可以有自己的版本。

相关问题