Adicionando aplicativos programaticamente no Azure AD usando o fluxo de credenciais do cliente

Para uso com o Gerenciamento de API do Azure, estou tentando adicionarFormulários para um Azure Active Directory (AAD) programaticamente, no meu caso, usando a API do Graph.

Meu cenário é o seguinte: Para proteger uma API da Web que quero gerenciar com o Gerenciamento de API do Azure, quero aproveitar a funcionalidade OAuth do AAD para fazer o trabalho pesado em relação à autenticação e emitir Tokens JWT e, em seguida, basta usar a política validate-jwt para verificar se está tudo bem no Gerenciamento de API do Azure. Isso tem a vantagem de poder omitir mais ou menos a autenticação no meu serviço de back-end.

Isso funciona bem, desde que eu tenha criado um aplicativo no Azure AD para o aplicativo Web consumidor, mas isso deve ser feito manualmente no Portal do Azure; O APIm do Azure não faz isso automaticamente.

Agora, o que estou tentando fazer para realizar o trabalho automaticamente: queria delegar a assinatura das APIs no APIm para outro aplicativo Web que estou escrevendo e, a partir daí, quero aproveitar a API do Graph para criar um aplicativo no Azure AD e conceda permissões para o Aplicativo da API.

A primeira coisa que tentei fazer foi ter um terceiro aplicativo (meu aplicativo de serviço) para ter permissões completas para o aplicativo Windows Azure Active Directory no Azure AD; isso permite que meu aplicativo acesse o AAD usando a API Graph REST. Consigo obter um token de acesso usando a concessão client_credentials (em login.microsoft.com), mas esse token não me permite fazer umaPOST emhttps://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."
            }
        }
    }

Eu encontrei (https://msdn.microsoft.com/Library/Azure/Ad/Graph/howto/azure-ad-graph-api-permission-scopes) que, mesmo que eu concedaDirectory.ReadWrite.All permissão, o aplicativo (somente aplicativo) não poderá criar ou atualizar aplicativos:

Nota: Exclui especificamente a criação ou atualização de entidades não listadas acima. Isso inclui: Aplicativo, Oauth2PermissionGrant, AppRoleAssignment, Dispositivo, ServicePrincipal, TenantDetail, domínios, etc.

A próxima coisa que tentei foi a concessão de senha do proprietário do recurso (grant_type=password), passando minhas próprias credenciais adicionalmente, para que eu possa me representar na API do Graph. Agora meuPOST aoapplications ponto final bem-sucedido.

Minha pergunta final é: Posso conceder permissões suficientes ao meu aplicativo para poder adicionar aplicativos programaticamente usando o fluxo de credenciais do cliente, e não qualquer fluxo que atue em nome de um usuário? E se sim, como é feito?

questionAnswers(1)

yourAnswerToTheQuestion