Agregar aplicaciones mediante programación en Azure AD mediante el flujo de credenciales de cliente

Para usar con Azure API Management, estoy tratando de agregarAplicaciones a un Azure Active Directory (AAD) mediante programación, en mi caso utilizando la API Graph.

Mi escenario es el siguiente: para asegurar una API web que quiero administrar con Azure API Management, quiero aprovechar la funcionalidad OAuth de AAD para hacer el trabajo pesado con respecto a la autenticación y la emisión de tokens JWT, y luego simplemente usar la política validate-jwt para verificar que todo esté bien en Azure API Management. Esto tiene la ventaja de que puedo omitir más o menos la autenticación en mi servicio de back-end.

Esto funciona bien, siempre que haya creado una aplicación en Azure AD para la aplicación web de consumo, pero esto debe hacerse manualmente desde el Portal de Azure; Azure APIm no lo hace automáticamente.

Ahora, para lo que estoy tratando de hacer para que se realice automáticamente: quería delegar la suscripción a las API en APIm a alguna otra aplicación web que estoy escribiendo, y desde allí quiero aprovechar Graph API para crear una aplicación en Azure AD y conceder permisos a la aplicación de la API.

Lo primero que intenté hacer fue tener una tercera aplicación (mi aplicación de servicio) para tener permisos completos de la aplicación Windows Azure Active Directory en Azure AD; Esto permite que mi aplicación acceda a AAD utilizando la API Graph REST. Logré obtener un token de acceso usando la concesión client_credentials (de login.microsoft.com), pero este token no me permite hacer unPOST enhttps://graph.windows.net/(my AAD ID)/applications?api-version=1.5:

    {
        "odata.error": {
            "code": "Authorization_RequestDenied",
            "message": {
                "lang": "en",
                "value": "Insufficient privileges to complete the operation."
            }
        }
    }

Encontré (https://msdn.microsoft.com/Library/Azure/Ad/Graph/howto/azure-ad-graph-api-permission-scopes) que incluso si concedo elDirectory.ReadWrite.All permiso, la aplicación (solo aplicación) no podrá crear ni actualizar Aplicaciones:

Nota: Excluye específicamente la creación o actualización de entidades que no figuran en la lista anterior. Esto incluye: Aplicación, Oauth2PermissionGrant, AppRoleAssignment, Dispositivo, ServicePrincipal, TenantDetail, dominios, etc.

Lo siguiente que probé fue la concesión de contraseña del propietario del recurso (grant_type=password), pasando mis propias credenciales adicionalmente, para que pueda suplantarme en la API Graph. Ahora miPOST alapplications punto final tiene éxito.

Mi pregunta final es: ¿puedo otorgar permisos suficientes a mi aplicación para poder agregar aplicaciones mediante programación utilizando el flujo de credenciales del cliente y no cualquier flujo que actúe en nombre de un usuario? Y si es así, ¿cómo se hace?

Respuestas a la pregunta(1)

Su respuesta a la pregunta