Azure Active Directory具有应用程序和服务主体的良好概念,可以作为应用程序e进行身份验证。 G。用于CI平台或SaaS应用程序。
现在有多种方法可以使用cmdlet创建 MSOL :
New-MsolServicePrincipal -DisplayName "My new API app" -Type password -Value $myClientSecret
这非常合适(在使用Add-MsolRoleMember
将一些角色分配给服务主体后,我可以访问Graph API)。但我还有一些问题:
也许有人可以回答我第四个问题:上述MSOL cmdlet和New-AzureRmADApplication
+ New-AzureRmADServicePrincipal
cmdlet之间有什么区别?我应该什么时候使用它们?
答案 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-MsolServicePrincipal
或New-AzureRmADServicePrincipal
指定它。
第四个问题的答案是MSOL cmdlet使用旧版API,而两个较新的选项使用Azure AD Graph API。 ARM cmdlet会在Portal中创建您可以看到的应用程序。他们仍然会在企业应用程序列表中创建一个您无法看到的。
在创建没有应用程序的服务主体时,不同cmdlet的行为有所不同:
如果您希望主体显示在企业应用程序列表中,就像您通过门户创建它一样,则可以使用v2 cmdlet提供必需的标记:
New-AzureADServicePrincipal -Tags @("WindowsAzureActiveDirectoryIntegratedApp") -AppId ed5fa582-3991-4114-87da-30081c4105fb
在我看来,新的v2 cmdlet是最好的,至少它们允许您以类似于Portal的方式创建服务主体。如果您的目的是在ARM API中创建使用RBAC的服务标识,那么ARM cmdlet就可以了,因为可以看到主。