我需要根据用户凭据和用户访问权限来保护 Azure 中的 ML 端点。
现在,我们正在基于服务主体帐户进行授权,但现在我们想要针对每个用户进行测试。
我可以查看 REST API 的文档,以获取 access_token,以便针对服务主体帐户向 ARM(azure 资源管理器)发出 Rest API 请求,但不适用于任何 azure 用户。
那么有什么关于这是否可以实现的指示吗?
所以,基本上我想做的是:
- 当用户尝试访问端点时,需要验证他的凭据是否可以访问 API,
- 据我所知,可以将任意数量的用户添加到工作区,但并非所有用户都有权访问评分端点请求。
- 在这种情况下,只有允许的用户才能提出请求,而其他用户应被拒绝。
最佳答案
要根据用户凭据生成访问 token ,您可以使用ROPC流
。
使用该 token 调用 API 时,将根据 Azure 用户的角色或权限进行验证。
我尝试在我的环境中重现相同的结果并得到以下结果:
我创建了一个 Azure AD 应用程序,并同意 API 权限,如下所示:
我通过 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
回应:
使用上述访问 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
回应:
请注意,上述用户在允许用户发出请求的订阅中具有贡献者
角色。
现在,我通过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
回应:
当用户包含上述 token 来发出相同请求时,访问会被拒绝,并出现 403 Forbidden
错误,如下所示:
GET https://management.azure.com/subscriptions/<subscriptionID>/resourceGroups?api-version=2021-04-01
回应:
请注意,上述用户没有所需的角色
或权限
访问拒绝请求的 Azure 资源。
关于azure - 如何创建 access_token 来为用户而不是服务主体访问 ARM API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73974529/