管理员同意不适用于 v2 应用程序中的范围 User.Read.All

Admin consent does not work for scope User.Read.All in v2 App

我从这里将 Azure 示例下载到 'Build a multi-tenant daemon with the v2.0 endpoint': https://github.com/Azure-Samples/active-directory-dotnet-daemon-v2

我在apps.dev.microsoft.com注册了应用,设置Application Permission scope为User.Read.All,并在代码中Startup.Auth.cs替换了Application ID和生成的密码secret。

示例代码运行良好,但管理员许可授权似乎不起作用。

AccountController.RequestPermissions() 中的代码成功构建并发送了管理员同意请求。同意页面显示正确的范围:"Read all users' full profiles"。提供同意后,我被重定向到 https://localhost:44316/Account/GrantPermissions?admin_consent=True&tenant=my-tenant-id,显示授权成功。之后,我还看到该应用出现在我在 Azure 门户上的企业应用程序中。

然而,在 UsersController.Index 中调用 https://graph.microsoft.com/v1.0/users 仍然会导致“403 Forbidden”。 Fiddler 中的错误详细信息显示:

"code": "Authorization_RequestDenied", "message": "Insufficient privileges to complete the operation."

该请求中的 JWT Bearer 令牌持有我正确的租户 ID 和一个角色:"User.Read.All"。

我的账号是这个租户的全局管理员,可以查询graph.microsoft.io上的用户。

日期为 6 月 30 日表明尚无法将 admin_consent 与 App Model v2 一起使用。然而,我下载的示例是从 9 月下旬开始的,并且准确地显示了这种情况,所以我希望它同时得到支持。

App Model v2 是否已经支持admin_consent?如果是这样,谁能帮我找出问题所在?谢谢。

你似乎什么都做对了。我们有一个关于此主题的活跃问题,如果您想参与,请加入 GitHub:https://github.com/Azure-Samples/active-directory-dotnet-daemon-v2/issues/1

在示例说明中,如果您不使用脚本,请密切注意 Register the client app (daemon-console)

中的步骤 5

上面写着:

  1. In the list of pages for the app, select API permissions
  • Click the Add a permission button and then,
  • Ensure that the Microsoft APIs tab is selected
  • In the Commonly used Microsoft APIs section, click on Microsoft Graph
  • In the Application permissions section, ensure that the right permissions are checked: User.Read.All
  • Select the Add permissions button

如果您select委派权限而不是应用程序权限,当您运行样本:

Authorization_RequestDenied
Insufficient privileges to complete the operation.

如果你不注意,很容易犯这个简单的错误。