为什么我能够访问不同租户的用户,而无需向 Azure 门户中的应用程序添加任何 API 权限?
Why I am able to access the users of a different tenant without adding any API permission to application in Azure Portal?
我在 Tenant A
中创建了一个名为 MyApp
的应用程序,具有多租户访问权限。此外,我没有在 Azure 门户中为其添加任何 API 权限。我还删除了默认的 User.Read
权限。
之后,我使用 msal4j
库实现了一个后端项目。在后端代码中,我发送了硬编码范围 Directory.ReadWrite.All
.
之后,我运行 后端项目。该项目显示 Microsoft 登录在浏览器中弹出。我提供了另一个名为 B
(Tenant B
有 16 个用户)的租户的管理员凭据。登录成功后弹出Permission Requested,上面写了关于Directory.ReadWrite.All
的描述。这是正常的,因为我在后端代码中添加了 Directory.ReadWrite.All
作为范围。
作为 Tenant B
的管理员批准请求的权限后。我可以使用 Microsoft Graph API
的 GET /users
端点列出 Tenant B
的 16 个用户。因此,在 Tenant A
中创建的 MyApp
可以访问 Tenant B
.
的用户
可是,怎么可能呢?因为我没有在 Azure 门户中为我的 MyApp
添加任何 API 权限。你可以看到上面的截图是空的。我预计在访问 GET /users
端点时会收到类似 "Insufficient privilege"
的错误。但我没有。我可以成功访问所有 16 个用户,尽管我没有在 Azure 门户中将 Directory.ReadWrite.All
API 权限添加到 MyApp
.
如果从后端项目发送 Directory.ReadWrite.All
作为范围足以访问 GET /users
端点。为什么我们要在 Azure 门户中使用 API permissions
?
Azure 门户权限就是我们所说的静态权限。
您将它们与“.default”特殊范围一起使用,例如https://graph.microsoft.com/.default
.
当您在身份验证请求中指定范围时,即为动态权限。
它是较新的 v2 端点的一项功能,允许您在运行时而不是提前请求所需的权限。
这对于多租户应用程序来说非常好,因为可以更轻松地完成更新权限,并且您可以更好地实现可选功能(需要额外权限)。
文档:https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent and https://docs.microsoft.com/en-us/azure/active-directory/develop/consent-framework
我在 Tenant A
中创建了一个名为 MyApp
的应用程序,具有多租户访问权限。此外,我没有在 Azure 门户中为其添加任何 API 权限。我还删除了默认的 User.Read
权限。
之后,我使用 msal4j
库实现了一个后端项目。在后端代码中,我发送了硬编码范围 Directory.ReadWrite.All
.
之后,我运行 后端项目。该项目显示 Microsoft 登录在浏览器中弹出。我提供了另一个名为 B
(Tenant B
有 16 个用户)的租户的管理员凭据。登录成功后弹出Permission Requested,上面写了关于Directory.ReadWrite.All
的描述。这是正常的,因为我在后端代码中添加了 Directory.ReadWrite.All
作为范围。
作为 Tenant B
的管理员批准请求的权限后。我可以使用 Microsoft Graph API
的 GET /users
端点列出 Tenant B
的 16 个用户。因此,在 Tenant A
中创建的 MyApp
可以访问 Tenant B
.
可是,怎么可能呢?因为我没有在 Azure 门户中为我的 MyApp
添加任何 API 权限。你可以看到上面的截图是空的。我预计在访问 GET /users
端点时会收到类似 "Insufficient privilege"
的错误。但我没有。我可以成功访问所有 16 个用户,尽管我没有在 Azure 门户中将 Directory.ReadWrite.All
API 权限添加到 MyApp
.
如果从后端项目发送 Directory.ReadWrite.All
作为范围足以访问 GET /users
端点。为什么我们要在 Azure 门户中使用 API permissions
?
Azure 门户权限就是我们所说的静态权限。
您将它们与“.default”特殊范围一起使用,例如https://graph.microsoft.com/.default
.
当您在身份验证请求中指定范围时,即为动态权限。 它是较新的 v2 端点的一项功能,允许您在运行时而不是提前请求所需的权限。 这对于多租户应用程序来说非常好,因为可以更轻松地完成更新权限,并且您可以更好地实现可选功能(需要额外权限)。
文档:https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent and https://docs.microsoft.com/en-us/azure/active-directory/develop/consent-framework