microsoft management azure powershell automation azure-active-directory

management - ¿Cómo agregar aplicaciones a Azure AD mediante programación?



panel azure login (4)

Quiero automatizar la creación de mi aplicación en Azure AD y recuperar el ID de cliente generado por Azure AD.

¿Hay comandos de PowerShell para hacer esto? ¿Hay algún otro medio, como una API para hacer esto además de la consola de administración?

¿Me puede señalar un ejemplo?

¡Gracias!


Hay varias formas de crear una aplicación en AAD de forma programada. Cubriré brevemente dos formas diferentes de hacerlo: los CMDLET de PowerShell y la API Graph. En general, recomendaría encarecidamente usar Graph API para esto.

Potencia Shell:

Existen algunos módulos diferentes que tienen la capacidad de crear aplicaciones AAD / principios de servicio. Si necesita crear un nuevo objeto de aplicación en su inquilino, puede usar Azure PowerShell para realizar la siguiente llamada:

https://msdn.microsoft.com/en-us/library/mt603747.aspx

PS C:/> New-AzureRmADApplication -DisplayName "NewApplication" -HomePage "http://www.Contoso.com" -IdentifierUris "http://NewApplication"

Si necesita crear un principal de servicio para su aplicación en su inquilino, puede usar Azure AD PowerShell:

https://msdn.microsoft.com/en-us/library/azure/jj151815.aspx

https://msdn.microsoft.com/en-us/library/azure/dn194119.aspx

New-MsolServicePrincipal -ServicePrincipalNames @("MyApp/Contoso.com") -DisplayName "My Application"

API Graph: (recomendado)

También puede crear aplicaciones haciendo un POST a nuestra API Graph: https://msdn.microsoft.com/Library/Azure/Ad/Graph/api/entity-and-complex-type-reference#ApplicationEntity

Tenemos ejemplos que muestran cómo puede registrarse y crear una aplicación para apuntar a la API Graph, y usar la biblioteca de cliente Graph para ayudarlo a hacer las llamadas correctas a la API:

https://github.com/AzureADSamples/WebApp-GraphAPI-DotNet

¡Espero que esto ayude!


He escrito algunos scripts PowerShell que

  • Crear aplicaciones AAD (gracias principalmente a Matt''s respuesta Matt''s )
  • Crear una bóveda de claves en Azure
  • Crear una clave en la Bóveda de claves
  • Asigne permisos al almacén de claves para las aplicaciones AAD

Sé que esto es más de lo que está pidiendo, pero si, como yo, le interesa recuperar el secreto (también conocido como clave) de la aplicación (el mismo que agrega en el portal que debe copiar antes) nunca volver a verlo), entonces el second script le permitirá enviarlo explícitamente como parte de la carga útil en una llamada a la API Graph. La secuencia de comandos lo guardará en un archivo para que pueda consultarlo más adelante.

Los otros scripts no son realmente lo que está preguntando, pero aún puede encontrarlos útiles si alguna vez necesita configurar SQL Server para que funcione con Azure Key Vault para TDE o cifrado a nivel de columna.


Llego un poco tarde a la fiesta, pero recientemente también me encontré con este desafío. Aquí están los extractos relevantes de mi solución ...

Primero necesitas obtener el token de autenticación. Para esto, puede usar esta práctica función.

function GetAuthToken { param ( [Parameter(Mandatory=$true)] $TenantName ) $adal = "${env:ProgramFiles(x86)}/Microsoft SDKs/Azure/PowerShell/ServiceManagement/Azure/Services/Microsoft.IdentityModel.Clients.ActiveDirectory.dll" $adalforms = "${env:ProgramFiles(x86)}/Microsoft SDKs/Azure/PowerShell/ServiceManagement/Azure/Services/Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll" [System.Reflection.Assembly]::LoadFrom($adal) | Out-Null [System.Reflection.Assembly]::LoadFrom($adalforms) | Out-Null $clientId = "1950a258-227b-4e31-a9cf-717495945fc2" $redirectUri = "urn:ietf:wg:oauth:2.0:oob" $resourceAppIdURI = "https://graph.windows.net" $authority = "https://login.windows.net/$TenantName" $authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority $authResult = $authContext.AcquireToken($resourceAppIdURI, $clientId,$redirectUri, "Auto") return $authResult }

(tomado de Paulo Marques https://blogs.technet.microsoft.com/paulomarques/2016/03/21/working-with-azure-active-directory-graph-api-from-powershell/ )

Luego, puede enviar una solicitud POST a la API de gráficos de Azure Active Directory para crear su aplicación. Sin embargo, se requiere una pequeña configuración.

# The name of this AAD instance $global:tenant = "mycompany.onmicorosft.com" $global:aadSecretGuid = New-Guid $global:aadDisplayName = "azure-ad-displayname" $global:aadIdentifierUris = @("https://contoso.com") $guidBytes = [System.Text.Encoding]::UTF8.GetBytes($global:aadSecretGuid) $global:aadSecret = @{ ''type''=''Symmetric''; ''usage''=''Verify''; ''endDate''=[DateTime]::UtcNow.AddDays(365).ToString(''u'').Replace('' '', ''T''); ''keyId''=$global:aadSecretGuid; ''startDate''=[DateTime]::UtcNow.AddDays(-1).ToString(''u'').Replace('' '', ''T''); ''value''=[System.Convert]::ToBase64String($guidBytes); } # ADAL JSON token - necessary for making requests to Graph API $global:token = GetAuthToken -TenantName $global:tenant # REST API header with auth token $global:authHeader = @{ ''Content-Type''=''application/json''; ''Authorization''=$global:token.CreateAuthorizationHeader() }

Ahora puedes golpear la API Graph.

$resource = "applications" $payload = @{ ''displayName''=$global:aadDisplayName; ''homepage''=''https://www.contoso.com''; ''identifierUris''= $global:aadIdentifierUris; ''keyCredentials''=@($global:aadSecret) } $payload = ConvertTo-Json -InputObject $payload $uri = "https://graph.windows.net/$($global:tenant)/$($resource)?api-version=1.6" $result = (Invoke-RestMethod -Uri $uri -Headers $global:authHeader -Body $payload -Method POST -Verbose).value

Una vez que vuelve la respuesta, puede extraer los valores de configuración que necesita.

# Extract configuration values $keyObject = foreach($i in $result.keyCredentials) { $i } # Tenant ID $global:aadTenantId = Get-AzureRmSubscription | Select-Object -ExpandProperty TenantId # Application object ID $global:aadApplicationObjectId = $result | Select-Object -ExpandProperty objectId # App ID / Client ID $global:aadClientId = $result | Select-Object -ExpandProperty appId # Application Secret/Key $global:aadAppSecret = $keyObject | Select-Object -ExpandProperty keyId

¡Espero que esto ayude a alguien!