【问题标题】:Permissions for Azure database managementAzure 数据库管理权限
【发布时间】:2018-12-23 20:14:53
【问题描述】:

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

this guide 之后,我设法在 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”,我完全可以接受,但如果可能的话,我至少想了解为什么会发生这种情况。

【问题讨论】:

  • 您需要先删除或清除 Azure 帐户,通过添加新的 Azure 帐户为租户进行身份验证,然后选择订阅 ID。

标签: c# azure azure-sql-database azure-active-directory azure-management


【解决方案1】:

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

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

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

关于如何为 ASMARM Rest API 进行身份验证的更多详细信息,请参阅另一个SO thread

我该如何解决这个问题?

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

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

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

【讨论】:

  • 谢谢,这正是我正在寻找的答案!切换到Microsoft.Azure API 确实解决了这个问题,感谢这个答案,我们现在知道为什么会这样了。 :)
猜你喜欢
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
相关资源
最近更新 更多