获取只有显示名称的服务主体客户端 ID

Fetch a service principle client ID having only its display name

以下 bash 脚本代码用于通过 AZ CLI 获取服务主体的客户端 ID,方法是将其显示名称传递给脚本。

az ad sp show --id http://$SP_NAME

但现在我收到以下错误:

Service principal ... doesn't exist

$SP_NAME 变量包含与我在 Azure AD 中的应用注册中看到的完全相同的显示名称。


通过脚本部署服务主体时,我们没有 运行 脚本之前的服务主体对象 ID,只有我们要分配给服务主体的名称(显示名称)。这不仅在几个月前有效,根据 documentation 它应该仍然有效!


知道如何让它重新工作吗?

当执行命令 az ad sp show --id http://$SP_NAME 时,它会尝试通过在 AD 应用程序对象的 ServicePrincipalNames 元素中搜索确切的 ID 来解析服务主体,如 az 上的 here 所示cli Github.

创建服务主体时,请务必添加 http://$SP_NAME 作为应用程序标识符 URI,如下所示。

然后,如果您转到该应用程序注册的清单,应用程序 ID URI 显示在 identifierUris 下。

ServicePrincipalNames 元素是标识符的集合。所以现在命令应该输出正确的服务主体。