azure - 如何创建 access_token 来为用户而不是服务主体访问 ARM API

标签 azure azure-service-principal service-principal authz

我需要根据用户凭据和用户访问权限来保护 Azure 中的 ML 端点。

现在,我们正在基于服务主体帐户进行授权,但现在我们想要针对每个用户进行测试。

我可以查看 REST API 的文档,以获取 access_token,以便针对服务主体帐户向 ARM(azure 资源管理器)发出 Rest API 请求,但不适用于任何 azure 用户。

那么有什么关于这是否可以实现的指示吗?

所以,基本上我想做的是:

  1. 当用户尝试访问端点时,需要验证他的凭据是否可以访问 API,
  2. 据我所知,可以将任意数量的用户添加到工作区,但并非所有用户都有权访问评分端点请求。
  3. 在这种情况下,只有允许的用户才能提出请求,而其他用户应被拒绝。

最佳答案

要根据用户凭据生成访问 token ,您可以使用ROPC流

使用该 token 调用 API 时,将根据 Azure 用户的角色权限进行验证。

我尝试在我的环境中重现相同的结果并得到以下结果:

我创建了一个 Azure AD 应用程序,并同意 API 权限,如下所示:

enter image description here

我通过 Postman 使用具有 参数 的用户凭据成功获取访问 token ,如下所示:

POST https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/token

client_id:44xxxx450-xxxx-4be1-axxb-e7xxxxxxxx
grant_type:password
scope:https://management.azure.com/.default
username:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="71020318121e1f0503183105141f101f055f1e1f1c1812031e021e17055f121e1c" rel="noreferrer noopener nofollow">[email protected]</a>
password:xxxxxxxxx

回应:

enter image description here

使用上述访问 token ,用户可以成功向 Azure 资源管理器发出 Rest API 请求,如下所示:

//To fetch list of resource groups present in the subscription
GET https://management.azure.com/subscriptions/<subscriptionID>/resourceGroups?api-version=2021-04-01

回应:

enter image description here

注意,上述用户在允许用户发出请求的订阅中具有贡献者角色。

现在,我通过Postman不同 Azure 用户生成 token ,方式如下:

POST https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/token

client_id:44xxxx450-xxxx-4be1-axxb-e7xxxxxxxx
grant_type:password
scope:https://management.azure.com/.default
username:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d2a1a0bbb6b7bfbd92a6b7bcb3bca6fcbdbcbfbbb1a0bda1bdb4a6fcb1bdbf" rel="noreferrer noopener nofollow">[email protected]</a>
password:xxxxxxxxx

回应:

enter image description here

当用户包含上述 token 来发出相同请求时,访问会被拒绝,并出现 403 Forbidden 错误,如下所示:

GET https://management.azure.com/subscriptions/<subscriptionID>/resourceGroups?api-version=2021-04-01

回应:

enter image description here

注意,上述用户没有所需的角色权限 访问拒绝请求的 Azure 资源。

关于azure - 如何创建 access_token 来为用户而不是服务主体访问 ARM API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73974529/

相关文章:

c# - 在内存中创建文本文件,然后将其上传到 Azure Blob 存储

azure - 有没有办法通过 Azure 功能向 Azure 服务主体发送电子邮件?

azure - 如何将另一个服务主体作为所有者添加到应用程序注册

在 Linux Web 应用服务上禁用 Azure 托管服务标识选项

Azure 服务主体从容器注册表中提取镜像

azure - 如何以编程方式向外部用户授予对 azure 资源组的访问权限

azure - azure SDK 缺少 Microsoft.Threading.Tasks

azure - Azure 服务主体到底是什么?

azure - 如何登录 Azure 服务主体

azure - 使用 Azure 数据工厂将数据从 Azure Data Lake 复制到 SnowFlake,无需阶段