0

我正在开发一个连接到 Microsoft Azure 的小型应用程序,列出属于某个资源组的所有数据库,并导出所有所述数据库。我为此使用了Microsoft.WindowsAzure.Management.Sql库。

按照本指南,我设法在 AD 中为我的应用程序设置了应用程序注册,并为其分配Owner角色(用于测试),通过 Azure 进行身份验证并获取访问令牌。

但是,当我尝试使用该令牌对数据库执行任何操作(例如列出所有数据库,使用IServerOperations.List)时,我得到以下异常:

ForbiddenError: The server failed to authenticate the request. Verify that the certificate is valid and is associated with this subscription.

租户 ID、订阅 ID、客户端 ID 和客户端密码都是正确的,更改其中任何一个都会导致不同的异常,已经在身份验证阶段。

我怎样才能解决这个问题?如果正确答案是“切换到Microsoft.Azure.Management.Sql ”,我对此非常满意,但如果可能的话,我至少想了解为什么会发生这种情况。

4

1 回答 1

1

H如果正确答案是“切换到 Microsoft.Azure.Management.Sql”,我对此非常满意,但如果可能的话,我至少想了解为什么会发生这种情况。

Microsoft.WindowsAzure.Management.Sql实现ASM API(Azure 旧 API)。

您收到此错误的原因是您尝试使用应用程序权限对 Azure 资源管理器 (ASM) API 进行身份验证/授权。但服务管理 API 是委托权限,而不是应用程序权限。

有关如何对ASMARM Rest API 进行身份验证的更多详细信息,请参阅另一个SO 线程

我怎样才能解决这个问题?

Microsoft.Azure.Management.Sql实现 ARM API。正如您提到的,您可以使用Microsoft.Azure.Management.Sqlto 来代替Microsoft.WindowsAzure.Management.Sql

或者您可以使用基于X509 证书的授权来授权您的 ASM API 请求。有关如何使用管理证书进行身份验证的更多信息,您可以参考本教程

注意:建议使用Microsoft.Azure.Management.Sqlto 代替Microsoft.WindowsAzure.Management.Sql

于 2018-07-17T08:10:50.127 回答