應用程式必須先在 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,以及一個在 Microsoft Entra 生態系統中全球獨一無二的 AppID。
為應用程式建立服務主體
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 'SawyerM@contoso.com'
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