你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

获取现有服务主体

列出服务主体

如果你已有要使用的现有服务主体,此步骤会详细解释如何检索现有服务主体。

可使用 az ad sp list 检索租户中的服务主体的列表。 默认情况下,此命令返回租户的前 100 个服务主体。 若要获取某个租户的所有服务主体,请使用 --all 参数。 获取此列表可能需要很长时间,因此建议使用以下参数之一筛选该列表:

  • --display-name 用于请求具有与所提供名称匹配的前缀的服务主体。 服务主体的显示名称是在创建期间使用 --name 参数设置的值。 如果在创建服务主体期间未设置 --name,则名称前缀为 azure-cli-
  • --spn 基于完全服务主体名称匹配进行筛选。 服务主体名称始终以 https:// 开头。 如果用于 --name 的值不是一个 URI,则此值是后跟显示名称的 https://
  • --show-mine 仅请求由登录用户创建的服务主体。
  • --filter 伴随一个 OData 筛选器,并执行“服务器端”筛选。 建议使用此方法通过 CLI 的 --query 参数筛选客户端。 若要了解 OData 筛选器,请参阅筛选器的 OData 表达式语法

为服务主体对象返回的信息十分详细。 若要仅获取执行登录所需的信息,请使用查询字符串 [].{id:appId, tenant:appOwnerOrganizationId}。 下面的示例显示获取由当前登录用户创建的所有服务主体的登录信息:

az ad sp list --show-mine --query "[].{SPname:displayName, SPid:appId, tenant:appOwnerOrganizationId}" --output table

如果你在拥有许多服务主体的大型组织中工作,请尝试以下命令示例:

# get service principals containing a keyword
az ad sp list --display-name mySearchWord --output table

# get service principals using an OData filter
az ad sp list --filter "displayname eq 'myExactServicePrincipalName'" --output json

# get a service principal having a certain servicePrincipalNames property value
az ad sp list --spn https://spURL.com

重要

可以使用 az ad sp listaz ad sp show 检索用户和租户,但身份验证机密或身份验证方法不可用。 可使用 az keyvault secret show 检索 Azure Key Vault 中的证书机密,但默认情况下任何其他机密都不会存储。 如果忘记了身份验证方法或机密,请重置服务主体凭据

服务主体属性

使用 az ad sp list 获取服务主体列表时,可以在脚本中引用许多输出属性。

[
  {
    "accountEnabled": true,
    "addIns": [],
    "alternativeNames": [],
    "appDescription": null,
    "appDisplayName": "myServicePrincipalName",
    "appId": "00000000-0000-0000-0000-000000000000",
    "appOwnerOrganizationId": "00000000-0000-0000-0000-000000000000",
    "appRoleAssignmentRequired": false,
    "appRoles": [],
    "applicationTemplateId": null,
    "createdDateTime": null,
    "deletedDateTime": null,
    "description": null,
    "disabledByMicrosoftStatus": null,
    "displayName": "myServicePrincipalName",
    "homepage": "https://myURL.com",
    "id": "00000000-0000-0000-0000-000000000000",
    "info": {
      "logoUrl": null,
      "marketingUrl": null,
      "privacyStatementUrl": null,
      "supportUrl": null,
      "termsOfServiceUrl": null
    },
    "keyCredentials": [],
    "loginUrl": null,
    "logoutUrl": null,
    "notes": null,
    "notificationEmailAddresses": [],
    "oauth2PermissionScopes": [
      {
        "adminConsentDescription": "my admin description",
        "adminConsentDisplayName": "my admin display name",
        "id": "00000000-0000-0000-0000-000000000000",
        "isEnabled": true,
        "type": "User",
        "userConsentDescription": "my user description",
        "userConsentDisplayName": "my user display name",
        "value": "user_impersonation"
      }
    ],
    "passwordCredentials": [],
    "preferredSingleSignOnMode": null,
    "preferredTokenSigningKeyThumbprint": null,
    "replyUrls": [],
    "resourceSpecificApplicationPermissions": [],
    "samlSingleSignOnSettings": null,
    "servicePrincipalNames": [
      "00000000-0000-0000-0000-000000000000",
      "https://myURL.com"
    ],
    "servicePrincipalType": "Application",
    "signInAudience": null,
    "tags": [
      "WindowsAzureActiveDirectoryIntegratedApp"
    ],
    "tokenEncryptionKeyId": null,
    "verifiedPublisher": {
      "addedDateTime": null,
      "displayName": null,
      "verifiedPublisherId": null
    }
  }
]

使用 --query 参数检索服务主体属性并将其存储在变量中。

# Bash script
spID=$(az ad sp list --display-name myServicePrincipalName --query "[].{spID:appId}" --output tsv)
tenantID=$(az ad sp list --display-name myServicePrincipalName --query "[].{tenant:appOwnerOrganizationId}" --output tsv)
userConsentDescr=$(az ad sp list --display-name myServicePrincipalName --query "[].{ucs:oauth2PermissionScopes.userConsentDescription[0]}" --output tsv)
echo "Using appId $spID in tenant $tenantID for $userConsentDescr"

后续步骤

在了解如何检索现有服务主体后,请继续执行下一步,了解如何管理服务主体角色。