Azure AD - 应用注册 - clientId/secret vs 多租户应用?

时间:2021-07-01 08:49:23

标签: azure azure-devops azure-active-directory azure-service-principal

假设我在 import org.scalactic.{Equality, TolerantNumerics, TypeCheckedTripleEquals} import org.scalatest.wordspec.AnyWordSpec import org.scalatest.matchers.should.Matchers class RetCalcSpec extends AnyWordSpec with Matchers with TypeCheckedTripleEquals { ... 中有一个 App1。此 Tenant1 具有对同一租户 1 中订阅 App1 的贡献者访问权限。有一个与 App1 相关联的 SUB_1App1_ClientId

现在,我可以使用此 ID 和密码登录该租户并使用以下 URL 对 App1_ClientSecret 执行操作:

SUB_1

现在这个应用程序是单租户应用程序还是多租户应用程序有什么不同?使用此 ID/Secret,我可以从任何地方的任何服务访问此应用的登录。

另外,“将用户添加到此应用程序”是什么意思?假设我向此应用添加用户,是否意味着该用户也可以访问租户 1 中的订阅?

2 个答案:

答案 0 :(得分:0)

<块引用>

现在如果这个应用程序是单租户应用程序或 多租户应用程序?使用此 Id/Secret,我可以访问此应用的登录信息 来自任何地方的任何服务。

如果您希望此应用程序在其他租户中可用,就会出现差异。

对于单个租户,服务主体将仅在您的租户中创建。如果您将此应用程序设为多租户,一旦不同租户中的用户同意该应用程序,将在该租户中创建服务主体。必须在与该其他租户关联的 Azure 订阅中授予该服务主体适当的 Azure RBAC 权限。只有这样,您的应用程序才能使用客户端 ID/秘密对 Azure 订阅执行操作。

<块引用>

此外,“将用户添加到此应用”是什么意思?

创建应用程序时,您可以定义一些特定于该应用程序的角色。当您向应用添加用户时,您可以为用户分配这些角色中的一个或多个,然后只要您的用户访问应用,他们就可以执行这些角色允许的操作。

详细来说,假设您的应用程序是一个 Web API,它具有 2 个控制器操作 - GetPost。您可以做的是根据应用程序角色限制对这些控制器操作的访问。具有适当角色的用户将能够访问这些控制器操作。

<块引用>

假设我将用户添加到此应用程序,是否意味着该用户将拥有 也可以访问租户 1 中的订阅?

不一定是真的。如果代表登录用户调用 Azure 管理 API,则必须为它们分配适当的 Azure RBAC 角色才能执行操作。但是,如果代表应用程序调用 Azure 管理 API,则可以配置应用程序,以便在受应用程序角色保护的代码中的适当部分调用这些 API。例如,您希望在 Get 控制器操作中实现读取操作,并在 Post 控制器操作中实现创建操作。

答案 1 :(得分:0)

在您的示例中,如果 App1 是单租户应用,则它只能访问 Tenant1 中授予它的资源。虽然您可以在任何地方运行的代码中使用该 app_id 和机密:在该租户、另一个租户甚至另一个云中,但该代码只能访问 Tenant1 中的相关资源。

如果您希望您的应用能够跨多个租户访问资源,则需要由相应租户中的管理员将其添加到每个租户中。这只有在您将 App1 配置为多租户应用程序时才能实现。

将用户添加到应用程序允许用户访问应用程序本身。用户不会自动获取/继承授予应用程序的任何权限(例如在您的情况下订阅中的角色)