В этой статье мы обсудим, как получить каталог приложений, зарегистрированных в AAD. Для этого мы можем использовать Powershell с модулем AzureADPreview.
Есть два способа получить информацию о приложениях — через объект Service Principal (SPN), который создается для почти всех приложений при регистрации или через командлет Get-AzureADApplication. Первый способ использует командлет Get-AzureADServicePrincipal.
Обратите внимание, что эти два командлета используются разные ObjectID: Get-AzureADServicePrincipal использует ObjectID принципиала, а Get-AzureADApplication — сам объект приложения.
При поиске по SPN вам доступны почти все те же атрибуты, что и по самому приложению, но также еще доступны теги. Именно по тегам можно понять, какой тип приложения используется.
Напомню, что есть приложения SAML SSO (тег WindowsAzureActiveDirectoryCustomSingleSignOnApplication), WebApp/Web API (тег WindowsAzureActiveDirectoryIntegratedApp), Native Apps (тег WindowsAzureActiveDirectoryIntegratedApp) и Azure Application Proxy регистрации (WindowsAzureActiveDirectoryOnPremApp). Однако, некоторые типы приложений могут иметь несколько тегов сразу.
Пример получения WebApps и Native Apps:
$modernapps = Get-AzureADServicePrincipal -Top 1000 | where-object {$_.Tags -Contains "WindowsAzureActiveDirectoryIntegratedApp" -and $_.Tags -notcontains "WindowsAzureActiveDirectoryCustomSingleSignOnApplication" -and $_.Tags -notcontains "WindowsAzureActiveDirectoryOnPremApp"}
$webapps = @()
$native = @()
foreach ($i in $modernapps) {
    $appid = $i.appid
    if ( $(Get-AzureADApplication -Filter "appid eq '$appid'" | select -ExpandProperty PublicClient) -eq $false) {
        $webapps += $i
    }
    else {
        $native += $i
    }
}
Теперь получим количество приложении SSO, использующих SAML.
(Get-AzureADServicePrincipal -All:$True | where-object {$_.Tags -Contains "WindowsAzureActiveDirectoryCustomSingleSignOnApplication"}).count
И публикации Azure Application Proxy:
(Get-AzureADServicePrincipal -All:$True | where-object {$_.Tags -Contains "WindowsAzureActiveDirectoryOnPremApp"}).count
Теперь давайте получим список пользователь и AD групп, которые заасайнены на SAML приложения. Вместе с этим создадим кастомный объект, который будет в сбееб содержать полезную информацию о приложении, такую как URL, роли, AppID, срок истечения сертификата. для вывода объекта в Excel будем использовать дополнительный модуль ImportExcel.
$ssoapps = Get-AzureADServicePrincipal -All:$True | where {$_.Tags -contains "WindowsAzureActiveDirectoryCustomSingleSignOnApplication"}  | sort DisplayName
foreach ($app in $ssoapps) {
    $dispname = $app.DisplayName
    "*** Processing: " + $dispname
    $appobj = Get-AzureADApplication -Filter "AppID eq '$($app.AppID)'"
    $Groupclaims = $appobj.GroupMembershipClaims
    $IdentifierUris = ($appobj.IdentifierUris -join "; ")
    $replyuris = ($appobj.ReplyUrls -join "; ")
    $samlurls = ($appobj.SamlMetadataUrl -join "; ")
    $keys = $app.PasswordCredentials.EndDate
    $approles = ($app.Approles.DisplayName -join "; ")
    try {
        $assignments = (Get-AzureADServiceAppRoleAssignment -ObjectId $app.ObjectId | select -ExpandProperty PrincipalDisplayName) -join "; "
    }
    catch {
        $assignments = ""   
    }
    $exportobj = [PSCustomObject][Ordered]@{
        DisplayName   = $dispname
        AppID = $app.AppID
        ObjectID = $appobj.ObjectID
        "Certificate expiration" = $keys
        "App roles" = $approles
        "Users and Groups" = $assignments
        "Metadata URL" = $samlurls
        "Identifier URLs" = $IdentifierUris
        "Reply URLs" = $replyuris
    }
    $exportobj | Export-Excel -Path "c:\temp\AAD Inventory.xlsx" -WorksheetName "SAML SSO" -Append -TitleBold -AutoSize
}
 
