我正在构建一个用于配置 Azure 资源的 CLI 应用程序。之前我使用授权代码流程 resource
设置为https://management.azure.com/
。现在,我想切换到使用 RFC 8628 设备授权授予类型 ( Azure documentation )。我可以使用 openid profile
等范围成功登录。但是,当我使用像 https://management.azure.com
这样的范围时我收到错误:
{
"error": "invalid_scope",
"error_description": "AADSTS70011: The provided request must include a 'scope' input parameter. The provided value for the input parameter 'scope' is not valid. The scope openid https://management.azure.com/ is not valid. The scope format is invalid. Scope must be in a valid URI form <https://example/scope> or a valid Guid <guid/scope>.\r\n[..]",
"error_codes": [70011],
}
我正在发送一个 POST 请求,其正文如 client_id=<client-id>&scope=openid+https%3A%2F%2Fgraph.microsoft.com%2F.default
至https://login.microsoftonline.com/<tenant>/oauth2/v2.0/devicecode
。通过这些范围,我可以正常登录,但对 Azure 资源管理 API 的任何后续请求(例如,对 DELETE
资源组)都将失败,并显示 401 Unauthorized
.
最佳答案
如果您想使用设备代码流程访问azure资源,请按照以下步骤操作。
1.导航到门户中 Azure Active Directory
中的 AD 应用 -> API 权限
-> 添加权限
->选择Azure 服务管理
API -> 选择user_impersonation
。
2.导航到门户中的订阅 -> 访问控制 (IAM)
,确保您用于登录的用户帐户具有角色,例如订阅中的贡献者
。如果没有,请将用户添加为订阅中的角色,按照此 doc .
3.在 postman 中,使用下面的请求。
请求网址:
POST https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/devicecode
请求正文:
client_id=<client-id>
scope=https://management.azure.com/user_impersonation
在浏览器中,导航至https://microsoft.com/devicelogin
,输入代码并登录您的用户帐户,应用程序将让您同意权限,点击接受
。
4.登录成功后,在postman中使用下面的请求。
请求网址:
POST https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token
请求正文:
grant_type: urn:ietf:params:oauth:grant-type:device_code
client_id: <client-id>
device_code: <device_code in the screenshot of step 3>
5.使用第4步中的access_token
调用Azure REST API,例如Resource Groups - List ,效果很好。
更多详情,您可以引用-Microsoft identity platform and the OAuth 2.0 device authorization grant flow .
<小时/>此外,要在步骤 3 中成功同意权限,请确保以下设置(Azure AD -> 企业应用程序
-> 用户设置
-> 租户中的用户可以同意应用程序代表他们访问公司数据
)设置为是
,否则,您需要让管理员单击在步骤 1 中授予管理员对 xxxx
按钮的同意。
关于azure - 设备授权授予类型的 Azure 资源管理范围有多大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60737010/