azure - 设备授权授予类型的 Azure 资源管理范围有多大?

标签 azure oauth-2.0 azure-active-directory

我正在构建一个用于配置 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.defaulthttps://login.microsoftonline.com/<tenant>/oauth2/v2.0/devicecode 。通过这些范围,我可以正常登录,但对 Azure 资源管理 API 的任何后续请求(例如,对 DELETE 资源组)都将失败,并显示 401 Unauthorized .

最佳答案

如果您想使用设备代码流程访问azure资源,请按照以下步骤操作。

1.导航到门户中 Azure Active Directory 中的 AD 应用 -> API 权限 -> 添加权限 ->选择Azure 服务管理 API -> 选择user_impersonation

enter image description here

2.导航到门户中的订阅 -> 访问控制 (IAM),确保您用于登录的用户帐户具有角色,例如订阅中的贡献者。如果没有,请将用户添加为订阅中的角色,按照此 doc .

enter image description here

3.在 postman 中,使用下面的请求。

请求网址:

POST https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/devicecode

请求正文:

client_id=<client-id>
scope=https://management.azure.com/user_impersonation

enter image description here

在浏览器中,导航至https://microsoft.com/devicelogin,输入代码并登录您的用户帐户,应用程序将让您同意权限,点击接受

enter image description here

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>

enter image description here

5.使用第4步中的access_token调用Azure REST API,例如Resource Groups - List ,效果很好。

enter image description here

更多详情,您可以引用-Microsoft identity platform and the OAuth 2.0 device authorization grant flow .

<小时/>

此外,要在步骤 3 中成功同意权限,请确保以下设置(Azure AD -> 企业应用程序 -> 用户设置 -> 租户中的用户可以同意应用程序代表他们访问公司数据)设置为,否则,您需要让管理员单击在步骤 1 中授予管理员对 xxxx 按钮的同意。

enter image description here

关于azure - 设备授权授予类型的 Azure 资源管理范围有多大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60737010/

相关文章:

oauth-2.0 - AAD 组声称某些用户的 JWT token 中缺少

azure - 如何实现 SASTokenProvider 以进行每个容器的 SAS token 访问?

c# - 随机获取“System.Net.Sockets.SocketException : A connection attempt failed because the connected party

Azure 搜索 SQL Server Blob 列

spring - 在azure上部署maven web

android - 适用于 Android 的 AzureAD 抛出 ADALError.AUTH_REFRESH_FAILED_PROMPT_NOT_ALLOWED

javascript - Google Oauth 2 从授权码获取访问 token 和刷新 token

spring-security - 尝试解码 Jwt : Malformed Jwk set 时发生错误

Azure AD - 如何检查服务主体是否正在使用?

c# - 如何使用 Azure Active Directory .NET SDK 删除 AppRoleAssignment?