【问题标题】:What is the difference between Azure AAD App ObjectId and ApplicationId?Azure AAD 应用程序 ObjectId 和 ApplicationId 有什么区别?
【发布时间】:2019-04-08 23:17:35
【问题描述】:

AzureAAD App ObjectId 和 ApplicationId 有什么区别,两者都暴露给用户是否有特定原因?是否存在绝对需要 ObjectId 而不是 ApplicationId 的用例?

【问题讨论】:

  • 看看我希望你能得到正确的想法。不过,如果您有任何问题,请随时在评论中提问。
  • 谢谢,这也澄清了我关于 btw 服务主体和 aad 应用程序差异的问题!
  • 很高兴听到,被连接并快乐编码!

标签: azure azure-active-directory


【解决方案1】:

Azure AD 中的应用注册会生成 Application 对象。 Azure AD 中的所有对象都有一个对象 ID。当您发出 API 请求来处理特定的 Application 对象时,您将使用对象 ID:

GET https://graph.windows.net/{tenant-id}/applications/{object-id}?api-version=1.6

Application 对象的对象 ID 仅与应用注册的同一租户相关,并且仅用于标识该对象。

Application 对象的appId 属性用于跨租户和多个对象类型。有两个主要用途:

  1. 在各种登录和令牌流中识别应用程序(例如 OAuth 2.0 和 OpenID Connect 中的 client_id)。
  2. 唯一标识 ServicePrincipal 对象的支持 Application 对象。 (将 ServicePrincipal 对象视为给定 Azure AD 租户中应用的“实例”。)

【讨论】:

    【解决方案2】:

    应用程序 ID

    ApplicationId 对于代表此应用程序的单个应用程序对象将是相同的,对于为此应用程序创建的所有服务主体也将是相同的。

    对象 ID

    ObjectId 将是应用程序对象和每个服务主体的唯一值。这唯一地标识了 Azure AD 中的对象。它是所有 Azure AD 对象(甚至是用户、组或其他任何 Azure AD 对象)的属性

    1. 两者都暴露给用户是否有特定原因?
    2. 是否存在绝对需要 ObjectId 而不是 ApplicationId 的用例?

    是的,有很多原因。假设您需要使用Microsoft Graph API 了解您的应用程序的service principal。你不能直接调用它。

    为此,您需要在响应中包含resourceId,它是为其分配的目标资源(服务主体)的object id

    然后调用GET https://graph.microsoft.com/beta/servicePrincipals/,响应中的appId就是AD App的application id

    然后调用GET https://graph.microsoft.com/beta/applications,响应中的appId与GET https://graph.microsoft.com/beta/servicePrincipals/返回的appId相同。然后你就可以匹配它们了。

    这就是为什么您需要公开ApplicationIdObjectId。像这样,您需要这些 ID 的原因有很多。

    您还可以参考提到的资源以对您的查询有更多的了解here

    如果您仍有任何问题,请随时在此处发表评论。谢谢。

    【讨论】:

    • 一个人(一封电子邮件)是否有可能拥有不同的objectIds?
    • 什么意思?
    • 答案不清楚。 “不能直接调用”,直接调用什么?
    • object Id不能直接调用,获取每个注册的申请信息都需要使用Application (client) ID。希望这能解决您的困惑。不过,如果您有任何问题,请随时告诉我。谢谢
    猜你喜欢
    • 2017-10-31
    • 2016-04-28
    • 2017-04-11
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2017-05-26
    • 2018-04-30
    • 2015-10-01
    相关资源
    最近更新 更多