要在Azure中运行应用程序,我需要在Azure AD中创建一个应用程序和相应的服务主体。然后我的应用程序对此App / Principal对进行身份验证。要进行身份验证,我可以在App注册中创建应用程序密钥,或者我可以在Service Principal中创建密码(以及其他选项)。从实际的角度来看有什么不同?
例如,无论$ key是App的密钥还是Service Principal的密码,此代码都(从外部)运行完全相同:
$key = ConvertTo-SecureString $authKeyOrPassword -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($appID, $key)
Add-AzureRmAccount -Credential $cred -TenantId $tenantID -ServicePrincipal
我应该何时对应用进行身份验证,何时应该使用服务主体?
答案 0 :(得分:3)
首先,让我解释为什么它在Azure AD中同时具有应用程序和服务主体。以下是Vittorio Bertocci对Azure App for Web App的Mordent Authentication的解释。
Azure AD定义了一个新实体,即应用程序 将应用程序描述为抽象实体:模板,如果您 将。作为开发人员,您使用应用程序。在部署时间a 给定的Application对象可以用作创建的蓝图 ServicePrincipal表示应用程序的具体实例 一个目录。这就是用于定义内容的ServicePrincipal 该应用程序实际上可以在该特定目标目录中执行,谁可以使用 它,它可以访问哪些资源,等等。
忍受我只是一个 不久,抽象部分几乎结束了。主要方式通过 Azure AD从应用程序创建ServicePrincipal 同意。这是流程的简化描述:说你 在目录A中创建一个Application对象,提供所有 我们在前面章节中讨论过的协议坐标。说 租户B的用户导航到应用程序的页面和触发器 身份验证流程。 Azure AD通过B对用户进行身份验证 它的主目录,B。这样做,它看到没有 B中应用程序的ServicePrincipal;因此,它提示用户 是否他或她想同意该应用程序访问该应用程序 目录B(稍后你将看到它的容量)。如果用户授予 同意,Azure AD使用A中的Application对象作为蓝图 在B中创建ServicePrincipal。与此同时,B记录当前用户同意使用此应用程序(稍后会考虑很多细节)。完成后,用户会收到一个用于访问应用程序的令牌。
如果您想了解Azure AD App密钥和服务原则密码之间的区别,您最好知道应用程序和服务主体之间的关系。我将复制并粘贴this page of the documentation
中的一些摘录在Azure门户中注册Azure AD应用程序时,在Azure AD租户中创建了两个对象:应用程序对象和服务主体对象。
将应用程序对象视为应用程序的全局表示形式,以便在所有租户中使用,并将服务主体视为在特定租户中使用的本地表示形式。应用程序对象用作模板导出哪些common和default属性以用于创建相应的服务主体对象。
因此,应用程序对象与软件应用程序具有1:1的关系,并且与其对应的服务主体对象具有1:多的关系。必须在使用该应用程序的每个租户中创建服务主体,从而启用它为登录和/或访问由租户保护的资源建立身份。
示例图
<强>摘要强>
现在,我们可以了解Azure AD App密钥和服务原则密码之间的区别。它们属于不同的对象。与服务主体关联的密码。这仅适用于应用程序租户登录azure。但是,您可以使用应用程序ID提供App键值,以便作为具有所有租户的应用程序登录。
要在Azure Active Directory中查看有关应用程序和服务主体对象的更多详细信息,可以参考this document。