为什么我的JWT令牌的范围中缺少Azure权限?

时间:2019-01-04 15:37:00

标签: azure permissions jwt azure-active-directory microsoft-graph

我对用户在我的JWT中显示为作用域的应用授予的权限有疑问。

我想允许用户在我的页面上看到他的租户列表(Office 365)。为此,我需要一个https://management.azure.com/user_impersonation范围的令牌。我将权限添加到了Azure API权限。当用户首次登录时,他会看到以下内容:

permission request

在此屏幕上,我假定我的设置可以正常运行,因为系统要求用户向我的应用授予我所需的权限(随您访问Azure服务管理)。但是,当我将JWT粘贴到the JWT Debugger上时,在范围中看不到范围user_impersonation

我明白了:

scp variable value

我已经尝试从测试用户的应用程序(在其Azure门户中)中删除该应用程序,以使其再次征求同意,但是仍然是相同的。其他测试用户也有相同的结果。 我需要的只是在范围中查看user_impersonation。这样,我就可以调用API端点,该端点返回用户的租户列表。

2 个答案:

答案 0 :(得分:1)

您需要获取https://management.azure.com资源的访问令牌。 或者,如果使用v2,请在https://management.azure.com/user_impersonation范围内请求它。

这看起来像是MS Graph API令牌。

访问令牌始终仅对一个API有效,因此您需要为Azure Management API要求一个令牌。

答案 1 :(得分:0)

现在可以使用!

因此,我尝试在一个令牌中同时获得https://management.azure.com/https://graph.microsoft.com/的范围。如Juunas所述,您必须为每个API获取一个单独的令牌。但是,尽管可以同时征得双方的同意。

我的流程是这样:

  1. 我在登录时要求用户同意某些权限(仅适用于API和首次登录)
  2. 我在后台请求Graph API范围的令牌
  3. 我请求Azure管理API范围的第二个令牌