列表订阅操作:403 禁止

Posted

技术标签:

【中文标题】列表订阅操作:403 禁止【英文标题】:List subscription operation: 403 forbidden 【发布时间】:2013-10-03 05:14:47 【问题描述】:

我正在拨打Azure REST List Subscription Operation。

在我的开发机器上,我已将证书安装到当前用户\个人中。我可以成功调用 API 并得到响应。响应码 = 200

在测试盒上,我已将相同的证书安装到 Current Use\Personal。我无法调用 API。我得到一个 403 禁止。完整错误如下:

<Error>
    <Code>AuthenticationFailed</Code>
    <Message>The server failed to authenticate the request.
    Verify that the certificate is valid and is associated with this subscription.
    </Message>
</Error>

所以我检查了证书,它从今天早些时候开始有效(因为它是今天进口的)并且有效到 2040 年 1 月。所以我认为它是有效的?

问题:

    相同的代码/项目/服务在我的本地机器上工作,但在测试盒上不工作。为什么? 证书指纹相同,证书相同。该证书与 Subscription azure 帐户相关联,因为它在本地工作!为什么?

    我还应该检查什么?我知道本地和测试盒服务都将证书附加到 Web 请求(我通过详细日志记录知道这一点),但在

    HttpWebResponse webResponse = webRequest.GetResponse() as HttpWebResponse;

我收到 403 禁止错误。

在这件事上我疯了。

更新:

在我在 Fiddler 中查看的响应中,响应的开头是:

HTTP/1.1 403 Forbidden
Content-Length: 294
Content-Type: application/xml; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
Date: Fri, 27 Sep 2013 02:49:59 GMT

现在我想知道 Date 部分是否是问题所在。我记得读到日期必须在请求的 15 分钟内。在测试框中,当前时间是下午 12:49,因此返回的日期似乎“提前”了 2 小时。这可能是为什么?或者该响应只是提琴手对日期的解释?

【问题讨论】:

403 错误通常表示证书有问题。根据您之前发布的其他帖子,我记得您的测试盒上的证书有问题。您可以做的一件事是在您的测试盒上创建一个全新的证书,而不是从开发盒导入并使用该证书来验证 API 请求。 是的,我想过这样做,但是盒子被锁定并且没有安装 makecert。 再想一想——在其他机器上创建一个证书,然后像在测试机器上一样将它导入到开发机器上。这样,您将能够在您的开发盒上重新创建测试环境(就证书而言)。另外,不确定您的测试盒上是否安装了 IIS,但您也可以使用 IIS 创建证书。 我设法在开发盒上安装了 makecert,创建了一个证书,将其上传到 Azure 并运行了服务。仍然得到 403 禁止。 这太奇怪了。我什至尝试更改计算机上的日期/时间,一切正常。顺便说一句:您是否考虑过使用发布设置文件来实施您的解决方案? 【参考方案1】:

从我的开发机器中以 PFX 格式私钥 导出证书,然后在生产机器上导入该 PFX 证书是解决身份验证/证书问题的方法就我而言。

【讨论】:

azure 只允许 .cer 文件,如何为 PFX 做到这一点? 是的,对于 Azure,您只需上传 .CER 文件(Azure > 设置 > 管理证书)。在我的回答中,我指的是与 Azure 通信的服务器的设置 - 我必须安装正确的证书才能使其正常工作。

以上是关于列表订阅操作:403 禁止的主要内容,如果未能解决你的问题,请参考以下文章

获取android订阅状态,403失败

我如何验证订阅者列表?

php 事件订阅者:重定向403访问被拒绝的内核异常

删除操作返回错误:出现意外错误(类型=禁止,状态=403)。禁止的

SqlServer 禁止架构更改的复制中手动修复使发布和订阅中分别增加的字段同步

为 Google 课堂获取课程列表时出现 403 禁止错误