Azure Active Directory应用程序和服务主体

时间:2017-02-01 18:44:31

标签: powershell azure active-directory azure-active-directory

Azure Active Directory具有应用程序服务主体的良好概念,可以作为应用程序e进行身份验证。 G。用于CI平台或SaaS应用程序。

现在有多种方法可以使用cmdlet创建 MSOL

New-MsolServicePrincipal -DisplayName "My new API app" -Type password -Value $myClientSecret

这非常合适(在使用Add-MsolRoleMember将一些角色分配给服务主体后,我可以访问Graph API)。但我还有一些问题:

  1. 为什么此cmdlet不需要先创建应用程序?
  2. 此cmdlet是否同时创建 - 应用程序和服务主体?
  3. 为什么我既没有在经典也没有新的天蓝色门户网站上看到应用程序?
  4. 也许有人可以回答我第四个问题:上述MSOL cmdlet和New-AzureRmADApplication + New-AzureRmADServicePrincipal cmdlet之间有什么区别?我应该什么时候使用它们?

2 个答案:

答案 0 :(得分:3)

1和2 - 可能是在租户中使用现有的Office 365应用程序(我相信它是隐藏的)?

3 - 由于您创建了服务主体,因此需要查看Azure门户中的enterprise applications以查看租户中的服务主体对象(而不是应用程序选项卡)。

4 - this link

申请对象
Azure AD应用程序由其唯一的应用程序对象定义,该应用程序对象位于注册了应用程序的Azure AD租户中,称为应用程序的“主”租户。应用程序对象为应用程序提供与身份相关的信息,并且是从中派生其相应服务主体对象以供在运行时使用的模板。

将应用程序对象视为应用程序的全局表示(用于所有租户),将服务主体视为本地表示(用于特定租户)。 Azure AD Graph Application实体定义应用程序对象的架构。因此,应用程序对象与软件应用程序具有1:1的关系,与其对应的n个服务主体对象具有1:n的关系。

服务主体
服务主体对象定义应用程序的策略和权限,为在运行时访问资源时表示应用程序的安全主体提供基础。 Azure AD Graph ServicePrincipal实体定义服务主体对象的模式。

在Azure AD租户允许应用程序访问其正在保护的资源之前,必须在给定租户中创建服务主体。服务主体为Azure AD提供了基础,以保护应用程序访问该租户的用户所拥有的资源。单租户应用程序将只有一个服务主体(在其租户中)。多租户Web应用程序还将在每个租户中拥有服务主体,其中来自该租户的管理员或用户已经同意,允许其访问其资源。经过同意,将咨询服务主体对象以用于将来的授权请求。

答案 1 :(得分:3)

ARM cmdlet和新的Azure AD v2 cmdlet都使用Azure AD Graph API。

但是,New-MsolServicePrincipal没有。它使用SOAP调用https://provisioningapi.microsoftonline.com/provisioningwebservice.svc。它是一个遗留API,您不应该使用它。

服务主体必须始终具有appId ,即创建它的应用程序的客户端ID。

字段appOwnerTenantId标识应用来自哪个租户。它可以为null 。这是MS内部应用程序的情况,例如Graph API,Azure门户等。但是也使用New-MsolServicePrincipal创建的服务主体,而忽略了appId

因此问题1和问题2的答案是:如果未指定应用程序,则会自动创建应用程序。但我不确定它的创建位置,因为它不能通过Graph API获得。这是一个纯粹的服务标识。 appId每次都不同,所以不只是使用一些占位符应用。

关于问题3:您在门户网站中看不到应用程序的原因是因为它不能通过Graph API获得,所以它隐藏在某个地方。对于服务主体,主体需要非常具体的魔术标记才能显示在企业应用程序列表中。和AFAIK一样,您无法使用New-MsolServicePrincipalNew-AzureRmADServicePrincipal指定它。

第四个问题的答案是MSOL cmdlet使用旧版API,而两个较新的选项使用Azure AD Graph API。 ARM cmdlet会在Portal中创建您可以看到的应用程序。他们仍然会在企业应用程序列表中创建一个您无法看到的。

在创建没有应用程序的服务主体时,不同cmdlet的行为有所不同:

  1. New-MsolServicePrincipal:使用某种隐藏应用创建主体,类似于MS内部应用(也设置servicePrincipalType = Legacy
  2. New-AzureRmADServicePrincipal:为您创建一个应用程序,然后创建服务主体(该应用程序在Portal中可见,但主体仅通过应用程序的刀片可见,因为缺少标记)
  3. New-AzureADServicePrincipal:不允许您在不提供appId的情况下创建
  4. 如果您希望主体显示在企业应用程序列表中,就像您通过门户创建它一样,则可以使用v2 cmdlet提供必需的标记:

    New-AzureADServicePrincipal -Tags @("WindowsAzureActiveDirectoryIntegratedApp") -AppId ed5fa582-3991-4114-87da-30081c4105fb
    

    在我看来,新的v2 cmdlet是最好的,至少它们允许您以类似于Portal的方式创建服务主体。如果您的目的是在ARM API中创建使用RBAC的服务标识,那么ARM cmdlet就可以了,因为可以看到主