应用需要先在 Microsoft Entra ID 中注册,Microsoft 标识平台才能授权该应用访问存储在 Microsoft Entra 或 Microsoft 365 租户中的数据。 此条件适用于你自行开发的应用、你的租户拥有的应用,或者你通过有效订阅访问的应用。
应用的许多设置都记录为可以使用 Microsoft Entra PowerShell 访问、更新或删除的对象。 这些对象包括应用程序、服务主体和应用角色分配。
本文介绍如何使用 Microsoft Entra PowerShell 管理应用注册和服务主体对象。 它介绍如何注册应用程序、配置属性、分配权限和管理应用所有权。
先决条件
若要使用 Microsoft Entra PowerShell 管理应用,需要:
- 一个 Microsoft Entra 用户帐户。 如果还没有帐户,可以免费创建一个帐户。
- 以下角色之一:
- 为自己授予该操作指明的权限最低的委派权限。
- 已安装 Microsoft Entra PowerShell 模块。 按照安装Microsoft Entra PowerShell 模块指南安装模块。
注册应用程序
以下请求通过仅指定所需 displayName 属性来创建应用。
Connect-Entra -Scopes 'Application.ReadWrite.All'
New-EntraApplication -DisplayName 'My new application'
DisplayName Id AppId SignInAudience PublisherDomain
----------- -- ----- -------------- -----------
My new application aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb bbbbbbbb-1111-2222-3333-cccccccccccc MyOrg
该应用程序被分配了一个 ID,该 ID 对租户中的应用而言是唯一的;同时还分配了一个 appId,该 appId 在 Microsoft Entra 生态系统中是全局唯一的。
为应用程序创建服务主体
Connect-Entra -Scopes 'Application.ReadWrite.All'
$myApp = Get-EntraApplication -Filter "DisplayName eq 'My new application'"
New-EntraServicePrincipal -AppId $myApp.AppId -DisplayName 'My new service principal'
DisplayName Id AppId SignInAudience ServicePrincipalType
----------- -- ----- -------------- --------------------
My new application bbbbbbbb-1111-2222-3333-cccccccccccc 00001111-aaaa-2222-bbbb-3333cccc4444 MyOrg Application
为应用配置基本属性
可以为应用配置多个属性。 以下示例演示如何更新应用程序的显示名称。
Connect-Entra -Scopes 'Application.ReadWrite.All'
$application = Get-EntraApplication -Filter "DisplayName eq 'My new application'"
Set-EntraApplication -ApplicationId $application.Id -DisplayName 'Contoso application'
也可以使用管道来更新应用程序属性。
Connect-Entra -Scopes 'Application.ReadWrite.All'
Get-EntraApplication -Filter "DisplayName eq 'My new application'" | Set-EntraApplication -DisplayName 'Contoso application'
有关详细信息,请参阅 Set-EntraApplication。
将应用登录限制为仅允许已分配的标识登录
使用 Microsoft Entra PowerShell 将应用登录限制为仅分配的标识,可确保只有授权用户才能访问应用程序、增强安全性和控制。
Connect-Entra -Scopes 'Application.ReadWrite.All'
$application = Get-EntraApplication -Filter "DisplayName eq 'My new application'"
Set-EntraServicePrincipal -ServicePrincipalId $application.Id -AppRoleAssignmentRequired $true
向应用分配权限
可以通过Microsoft Entra 管理中心或使用 Microsoft Entra PowerShell 向应用分配权限。 在 PowerShell 中,更新应用 requiredResourceAccess 的属性,包括现有权限和新权限。 如果仅传递新的权限,则会移除任何未获授权的现有权限。
分配权限并不会自动将这些权限授予应用。 仍必须使用Microsoft Entra 管理中心授予管理员同意。
Connect-Entra -Scopes 'Application.ReadWrite.All'
$application = Get-EntraApplication -Filter "DisplayName eq 'My new application'"
$requiredResourceAccess = @(
@{resourceAppId = '00000003-0000-0000-c000-000000000000'
resourceAccess = @(
@{
id = 'c79f8feb-a9db-4090-85f9-90d820caa0eb'
type = 'Scope'
}
@{
id = '9a5d68dd-52b0-4cc2-bd40-abcf44ac3a30'
type = 'Role'
} )
})
Set-EntraApplication -ApplicationId $application.Id -RequiredResourceAccess $requiredResourceAccess
管理所有者
检索服务主体的所有者
Connect-Entra -Scopes 'Application.ReadWrite.All'
$servicePrincipal = Get-EntraServicePrincipal -Filter "displayName eq 'Helpdesk Application'"
Get-EntraServicePrincipalOwner -ServicePrincipalId $servicePrincipal.Id -All | Select-Object Id, DisplayName, '@odata.type'
或者,使用管道来获取服务主体的所有者。
Get-EntraServicePrincipal -Filter "displayName eq 'Helpdesk Application'" | Get-EntraServicePrincipalOwner | Select-Object Id, DisplayName, '@odata.type'
将所有者分配给服务主体
Connect-Entra -Scopes 'Application.ReadWrite.All', 'Application.ReadWrite.OwnedBy'
$servicePrincipal = Get-EntraServicePrincipal -Filter "displayName eq 'Helpdesk Application'"
$owner = Get-EntraUser -UserId '[email protected]'
Add-EntraServicePrincipalOwner -ServicePrincipalId $servicePrincipal.Id -OwnerId $owner.Id
此示例演示如何向服务主体添加所有者。
-
-ServicePrincipalId- 指定要向其添加所有者的服务主体的唯一标识符(ObjectId)。 -
-OwnerId- 指定要添加为指定服务主体所有者的用户或组的唯一标识符(ObjectId)。
获取没有用户分配的所有应用程序的列表
若要获取不需要用户分配的所有应用程序的列表,请使用以下命令。
Connect-Entra -Scopes 'Application.ReadWrite.All'
Get-EntraServicePrincipal -All | Where-Object {$_.appRoleAssignmentRequired -ne 'True'}
DisplayName Id AppId SignInAudience ServicePrincipalType
----------------------------------- ----------------------------------- --------------------------------- ----------------- ------------------
Microsoft password reset service 00aa00aa-bb11-cc22-dd33-44ee44ee44ee 93625bc8-bfe2-437a-97e0-3d0060024faa AzureADMultipleOrgs Application
Microsoft.Azure.SyncFabric 11bb11bb-cc22-dd33-ee44-55ff55ff55ff 00000014-0000-0000-c000-000000000000 AzureADMultipleOrgs Application
Azure Security Insights 22cc22cc-dd33-ee44-ff55-66aa66aa66aa 98785600-1bb7-4fb9-b9fa-19afe2c8a360 AzureADMultipleOrgs Application
检索服务主体拥有或创建的对象
服务主体创建的对象
Connect-Entra -Scopes 'Application.Read.All'
$servicePrincipal = Get-EntraServicePrincipal -Filter "displayName eq 'Helpdesk Application'"
Get-EntraServicePrincipalCreatedObject -ServicePrincipalId $servicePrincipal.Id
服务主体拥有的对象
Connect-Entra -Scopes 'Application.Read.All'
$servicePrincipal = Get-EntraServicePrincipal -Filter "displayName eq 'Helpdesk Application'"
Get-EntraServicePrincipalOwnedObject -ServicePrincipalId $servicePrincipal.Id -All | Select-Object Id, DisplayName, '@odata.type'
具有过期机密和证书的应用程序
过期应用程序机密或密码
$expirationThreshold = (Get-Date).AddDays(30)
$appsWithExpiringPasswords = Get-EntraApplication -All | Where-Object { $_.PasswordCredentials } |
ForEach-Object {
$app = $_
$app.PasswordCredentials | Where-Object { $_.EndDate -le $expirationThreshold } |
ForEach-Object {
[PSCustomObject]@{
DisplayName = $app.DisplayName
AppId = $app.AppId
SecretDisplayName = $_.DisplayName
KeyId = $_.KeyId
ExpiringSecret = $_.EndDate
}
}
}
$appsWithExpiringPasswords | Format-Table DisplayName, AppId, SecretDisplayName, KeyId, ExpiringSecret -AutoSize
即将过期的证书
$expirationThreshold = (Get-Date).AddDays(30)
$appsWithExpiringKeys = Get-EntraApplication -All | Where-Object { $_.KeyCredentials } |
ForEach-Object {
$app = $_
$app.KeyCredentials | Where-Object { $_.EndDate -le $expirationThreshold } |
ForEach-Object {
[PSCustomObject]@{
DisplayName = $app.DisplayName
AppId = $app.AppId
CertificateDisplayName = $_.DisplayName
KeyId = $_.KeyId
ExpiringKeys = $_.EndDate
}
}
}
$appsWithExpiringKeys | Format-Table DisplayName, AppId, CertificateDisplayName, KeyId, ExpiringKeys -AutoSize