我正在使用Azure应用服务API来查看服务器的详细信息,如工作进程和区域等。为了管理目的。从AuthenticationContext.AcquireTokenAsync方法生成令牌后,我请求以下URL获取服务器详细信息**https://management.azure.com/subscriptions/<sub ID>/resourceGroups//providers/Microsoft.Web/serverfarms/?2018-02-01**
在响应中,我得到AuthorizationFailed错误代码,详细信息如下:
客户端无权在作用域“/subscributions/xxxxxxxx-xxxxxxx-xxxx/resourceGroups/xxxxxxxxxxx/providers/Microsoft.Web/serverfarm/xxxx”上执行操作“Microsoft.Web/serverfarm/read”,或者作用域无效。如果最近授予了访问权限,请刷新您的凭据。
但是当我使用**https://learn.microsoft.com/en-us/rest/api/appservice/appserviceenvironments/get**门户尝试相同的验证时,请求返回了预期的结果。
那么,是否有其他方式进行身份验证,或者我应该定义一些权限来实现该功能?
4条答案
按热度按时间q0qdq0h21#
您正在使用的服务主体在该租户中没有权限。
租户拥有订阅,服务主体属于租户。Azure资源管理器还为给定主体公开基于角色的授权,这将赋予其对Azure资源的权限。服务主体似乎没有读取该订阅的权限。
转到门户网站并找到您的
subscription
,单击Access Control (IAM)
,然后单击Add role assignment
和correspond service principal
,您使用该correspond service principal
获取令牌。成功授予权限后,刷新并重试。
rta7y2nd2#
我在跑步时也遇到了同样的错误,
我在
az login
之后不久就这样做了。问题是我没有正确设置我的订阅,所以我必须做的是运行。在
az aks get-credentials
正常工作之后,错误消失了,您将得到如下输出:Merged "myAKSCluster" as current context in C:\Users\UserName\.kube\config
*cu6pst1q3#
我也有同样的问题。最初,我继续向我的用户添加了“Web计划贡献者”角色,因为它应该处理这些事情。没有任何变化-我仍然有这个错误。
实际问题是错误的资源组…原来我复制了一些旧脚本,其中WebAppPlans在单独的RG中,我在那里搜索应用程序计划。完全误导错误。我猜它会带来相同的错误消息,即使应用程序计划根本不存在。
y0u0uwnf4#
**由于
Azure
可能非常复杂,我将尝试将其分解,以便任何人都能理解。账户目录
当你创建一个Azure帐户时,它会创建一个
directory
(默认目录),一个目录叫做Tenant
,你可以有多个这样的directories
,我想你甚至可以有单独的登录凭据为每个,它就像一个完全独立的组织,每个directory
都有它的subscriptions
,resource groups
,resources
/apps
等。Azure Active Directory
每个目录都有自己的
Azure Active Directory
,列出了所有Users
、Groups
和Applications
,这些都是clients
/objects
将访问Directory
(租户)中的Resources
或对其执行操作的Resources
。在这种情况下,您的编程
app
将在您的Azureresources
上执行任务,为了做到这一点,client
(您的应用程序)需要有适当的permission
来执行特定的action
(无论您想做什么操作),直接允许在特定的resource
上执行它。首先,您需要创建一个
client
-这是注册app
的过程,在Azure Active Directory
>App Registrations
单击New Registration
,在这里您将您的程序app
注册为client
/object
,您希望使用它来访问Azureresources
,并给予其命名为MyApp,单击Register
,你会得到一个Application (client) ID
,你将在你的代码中使用它作为client ID
,这个app
现在是User
/Service Principal
,它现在仍然是给予它权限,你想在resource
上执行的操作。转到
Resource
/Resource group
(App Service
/Database
/VM
)或Subscription
(这将给予它访问整个subscription
中的所有resources
),单击Access control (IAM)
>Add
>Add role assignment
。Reader
。Members
选项卡,在这里我们将选择Service principal
(您刚刚注册的应用程序)。apps
,你需要搜索他们的名字,输入你刚刚给我的名字。Select
按照下图中的数字点击。
现在,您应该通过重新执行授权
client
的代码来刷新您的应用中的凭据,确保您使用了在Azure中注册的app
的正确client-ID
,对于某些权限,可能需要几分钟才能更新权限,一旦更新,您就可以开始了。如果您再次看到
AuthorizationFailed
,请检查它是否仍然是同一个action
的失败,因为可能需要为principal
分配另一个action
才能实现输出。我希望这能帮到某人...祝你好运!
可能有帮助的链接: