aad 应用程序密码和服务主体密码之间的区别

differences between aad application password and service principal password

创建 AAD 应用程序时,我们可以为该应用程序创建客户端机密。所以我知道客户端机密是针对应用程序的。作为对比,我们也可以为同一个应用程序创建多个服务主体。每个服务主体都可以使用 az ad sp create-for-rbac --name ServicePrincipalName 拥有自己的密码。但我没有找到在 Azure 门户上创建此类服务主体密码的方法。所以我想知道这两种凭据是否指的是同一件事。

据我所知,您无法在门户中创建服务主体凭据。您必须使用您描述的 CLI 方法或 PowerShell 命令。

门户中的内容严格用于创建客户端机密,以便与 OAuth 客户端凭据流一起使用以获得作为受信任客户端的令牌。

https://datatracker.ietf.org/doc/html/rfc6749#section-4.4 https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow

另一方面,服务主体更像是 Azure 中的域用户。它可以分配给订阅、资源组和资源中的 RBAC 角色。这对于 运行 应用程序服务来说很方便,因为此身份并授予该帐户访问存储帐户、保管库等的权限。

这2个凭据实际上是不同的东西。

应用程序上的凭据是最常见的一种,也是推荐用于几乎所有用途的一种。它是单一凭证,可让您在一个租户中的代码 运行 验证和访问此应用程序所在的其他租户中的资源 consented/added。

servicePrincipal 上的凭据仅用于获取在 serviceprincipal 所在的特定租户中授予应用程序的资源的访问权限。这适用于一组非常狭窄的场景,而不是推荐用于一般用途的场景。