Búsqueda de sitios web

Registre nuevas aplicaciones con Microsoft Graph PowerShell


En esta publicación, le mostraré cómo crear nuevas aplicaciones en Microsoft Entra usando Microsoft Graph PowerShell y el cmdlet Invoke-MgGraphRequest. Esto le permite crear nuevos registros de aplicaciones sin depender adicionalmente del módulo Microsoft.Graph.Applications.

Requisitos

Para crear registros de aplicaciones en Microsoft Graph PowerShell, primero deberá asegurarse de tener instalado el módulo Microsoft.Graph.Authentication. Esto le permite utilizar los cmdlets Connect-MgGraph e Invoke-MgGraphRequest.

También necesitará acceso a una cuenta de Administrador global para otorgar los permisos necesarios para la aplicación Microsoft Graph Command Line Tools.

Registrar una nueva aplicación

Trabajemos en el registro de una nueva aplicación en Microsoft Entra. Comenzaremos registrando una aplicación básica y luego agregaremos lentamente funciones además de eso. En primer lugar, debe conectarse a Microsoft Graph PowerShell y dar su consentimiento al permiso Application.ReadWrite.All.

Connect-MgGraph -Scope Application.ReadWrite.All

Ahora podemos definir algunas variables de referencia, que podemos desarrollar más. Los siguientes comandos registrarán una nueva aplicación en su inquilino con el nombre que defina en la variable $Name.

$Name = "Application Name"
$Uri = "Beta\Applications"
$body = @{
    DisplayName = "$Name"
    signInAudience = "AzureADMyOrg"
    requiredResourceAccess = @(
    )
    servicePrincipalLockConfiguration = @{
        isEnabled = $true
        allProperties = $true
        credentialsWithUsageSign = $true
        credentialsWithUsageVerify = $true
        identifierUris = $false
        tokenEncryptionKeyId = $true
    }
}
$payload = $body | ConvertTo-Json -Depth 4
Invoke-MgGraphRequest -Method POST -Uri $Uri -ContentType "application/json" -Body $payload

Si ejecuta el código anterior, el registro de la aplicación se creará en su inquilino y se utilizará únicamente con su inquilino. También he incluido la propiedad servicePrincipalLockConfiguration en la configuración si necesita modificar signInAudiance y desea seguridad adicional. Además, observe que he usado el cmdlet Invoke-MgGraphRequest en lugar de New-MgApplication. Esto se debe a que eventualmente convertiremos nuestro código en una función de PowerShell y quiero eliminar las dependencias de todos los módulos excepto el módulo de autenticación. Puede leer más sobre ese comando aquí: Cómo utilizar Invoke-MgGraphRequest con PowerShell.

En las siguientes secciones, nos basaremos en el código anterior configurando más ajustes de la aplicación.

Agregar un URI de redireccionamiento

Un URI de redireccionamiento es la ubicación a la que se enviará a un usuario después de que haya sido autorizado exitosamente a la aplicación. Para agregar un URI de redireccionamiento a su aplicación al crearla, agregue el siguiente código al cuerpo de su solicitud:

publicClient = @{
    redirectUris = @(
        "http://localhost"
    )
}

Esto agregará un URI de redireccionamiento de aplicaciones móviles y de escritorio con la ubicación de http://localhost a su aplicación. Esta sería la configuración deseada para crear una aplicación a la que pueda conectarse a través de Microsoft Grah PowerShell.

Agregar permisos

También puede agregar permisos a su aplicación en el momento de la creación utilizando el siguiente bloque de código. En este caso, 00000003-0000-0000-c000-000000000000 representa el recurso Microsoft Graph y cada tabla hash dentro de la matriz ResourceAccess representa un permiso específico.

requiredResourceAccess = @(
    @{
        resourceAppId = "00000003-0000-0000-c000-000000000000"
        resourceAccess = @(
        @{
          id ="ebfcd32b-babb-40f4-a14b-42706e83bd28"
          type = "Scope"
        }
        @{
          id = "e4aa47b9-9a69-4109-82ed-36ec70d85ff1"
          type = "Scope"
        }
      )
    }
  )

El tipo puede ser de Ámbito o Rol, dependiendo de si está agregando permisos delegados (Ámbito) o permisos de aplicación (Rol), y cada permiso tiene un ID único.

Para ver todos los permisos disponibles, el ID y el alcance, utilice el siguiente comando:

Find-MgGraphPermission | Select Name, PermissionType, Id | Sort -Property Name

Agregar múltiples permisos mediante programación

Agregar permisos, como hemos visto anteriormente, puede resultar bastante engorroso. Como ha visto, requiere mucho código, especialmente si necesita tener varios permisos a la vez o si necesita reutilizar el script y cambiar el permiso cada vez. Para resolver este problema, escribí algunas líneas de código para generar esta propiedad.

En primer lugar, deberá declarar los permisos que necesita y el tipo de permiso:

$Scope = "User.Read.All", "User.ReadWrite.All", "Group.Read.All", "Group.ReadWrite.All"
$context = "Delegated"

He almacenado una lista pública de permisos que luego deberás descargar y almacenar en la memoria:

#Download permissions list
if ($context -eq "Delegated") {
    $Permissions = Invoke-WebRequest -Method GET -Uri "https://raw.githubusercontent.com/DanielBradley1/Microsoft-Graph-PowerShell-Examples/main/Permissions/DelegatedGraphPermissions.csv" | ConvertFrom-Csv
    $Type = "Scope"
} Elseif ($context -eq "Application") {
    $Permissions = Invoke-WebRequest -Method GET -Uri "https://raw.githubusercontent.com/DanielBradley1/Microsoft-Graph-PowerShell-Examples/main/Permissions/ApplicationGraphPermissions.csv" | ConvertFrom-Csv
    $Type = "Role"
}

Luego se generará una colección de permisos, que almacenará tanto el Id como el tipo de cada permiso:

$resourceAccess = [System.Collections.Generic.List[Object]]::new()
Foreach ($Perm in $Scope){
    $obj = [PSCustomObject][ordered]@{
        "id" = ($Permissions | Where {$_.Name -eq $perm}).id
        "Type" = $Type
    }
    $resourceAccess.Add($obj)
}

Luego, la colección se agrega a una tabla hash temporal que, a su vez, se agrega a la propiedad requiredResourceAccess del cuerpo de la solicitud.

$resource = @{
    resourceAppId = "00000003-0000-0000-c000-000000000000"
    resourceAccess = $resourceAccess
}
$body.requiredResourceAccess += $resource

Agregar un logotipo

Lamentablemente, no se admite agregar un logotipo en el momento de la creación mediante Invoke-MgGraphRequest. Para solucionar esto, primero deberá almacenar el resultado de la creación de la aplicación de esta manera:

$Application = Invoke-MgGraphRequest -Method POST -Uri $Uri `
-ContentType "application/json" -Body $payload -OutputType PSObject

Luego, puede utilizar el método PUT mientras especifica la ruta de la imagen y el tipo de contenido como imagen. Esto actualizará exitosamente el logotipo de su aplicación.

Invoke-MgGraphRequest -Uri "$Uri/$($Application.id)/logo" -Method PUT `
-InputFilePath "C:\Temp\images.png" -ContentType "image/png"

Alternativamente, si tiene un archivo alojado en línea que desea descargar, puede usar PowerShell para descargarlo y almacenarlo localmente por un período temporal. Luego se puede utilizar para actualizar la aplicación de esta manera:

#Temporary image path
$imgpath = "C:\Temp\Image.png"
#Image to download
$webimage = "https://i.imgur.com/dAqRsQr.png"

#Download image
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($webimage, "$imgpath")

#Update image
Invoke-MgGraphRequest -Uri "$Uri/$($Application.id)/logo" -Method PUT `
-InputFilePath $imgpath -ContentType "image/png"

#Remove temporary image
Remove-Item -path $imgpath

Agregar notas internas

Las notas internas son una excelente manera de proporcionar información detallada a otros administradores sobre el propósito original, el alcance y las áreas de uso de una aplicación dentro de su entorno. Por supuesto, no debe almacenar información confidencial dentro de la sección de notas internas, sino almacenar información útil para ayudar a otros a comprender el propósito de su aplicación y su caso de uso previsto, de esa manera si el alcance de la aplicación se desvía de su intención original. , se puede abordar o actualizar.

Para agregar una nota interna a su solicitud, agregue el siguiente código al cuerpo de su solicitud:

Notes = "This is a new note"

Agregar propietarios de aplicaciones

Según la documentación de Microsoft, el usuario que creó una aplicación en Microsoft Entra se convierte automáticamente en propietario de dicha aplicación. Sin embargo, esto no es cierto cuando se crean aplicaciones con Microsoft Graph PowerShell. En su lugar, debe definir manualmente el propietario de la aplicación después de crearla.

Utilice el siguiente ejemplo para agregar un propietario de aplicación usando PowerShell, después de almacenar la aplicación creada en la variable $Application como vimos anteriormente.

#Change the object Id for the user you wish to add as an owner
$owner = @{
    "@odata.id" = "https://graph.microsoft.com/v1.0/directoryObjects/387c58a2-3fea-4e8e-979d-a49469b89100"
}

Invoke-MgGraphRequest -Method POST `
-Uri "https://graph.microsoft.com/v1.0/applications/$($Application.id)/owners/`$ref" `
-ContentType "application/json" -Body $owner | ConvertTo-Json

Artículos relacionados