Per l'utilizzo con Gestione API di Azure, Sto tentando di aggiungere ad Azure Active Directory (AAD) a livello di programmazione, nel mio caso utilizzando l'API Graph.Aggiunta di applicazioni a livello di programmazione in Azure AD Flusso di credenziali del client
Il mio scenario è il seguente: Al fine di proteggere un'API Web che desidero gestire con Azure API Management, voglio sfruttare la funzionalità OAuth di AAD per eseguire operazioni pesanti di autenticazione e rilascio dei token JWT, quindi utilizzare semplicemente il criterio validate-jwt per verificare che tutto sia a posto in Gestione API di Azure. Questo ha il vantaggio che posso più o meno omettere l'autenticazione nel mio servizio di back-end.
Questo funziona correttamente, purché sia stata creata un'applicazione in Azure AD per l'applicazione Web di consumo, ma questa operazione deve essere eseguita manualmente dal portale di Azure; L'API di Azure non lo fa automaticamente.
Ora per quello che sto cercando di fare per ottenere il risultato automatico: volevo delegare l'abbonamento alle API in APIm ad un'altra app Web che sto scrivendo, e da lì voglio sfruttare l'API Graph per creare un Applicazione in Azure AD e concedere le autorizzazioni all'applicazione dell'API.
La prima cosa che ho cercato di fare era di avere una terza applicazione (la mia applicazione di servizio) con le autorizzazioni complete dell'applicazione all'applicazione Windows Azure Active Directory in Azure AD; ciò consente alla mia applicazione di accedere a AAD utilizzando l'API Graph REST. Riesco ad ottenere un token di accesso utilizzando la concessione client_credentials (da login.microsoft.com), ma questo token non mi permetta di fare un POST
su https://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."
}
}
}
ho trovato (https://msdn.microsoft.com/Library/Azure/Ad/Graph/howto/azure-ad-graph-api-permission-scopes) che anche se mi concedo il permesso Directory.ReadWrite.All
, l'applicazione (app-solo) non sarà in grado di creare o aggiornare le applicazioni:
Nota: esclude specificamente creare o aggiornare per le entità non elencati sopra. Questo include: Applicazione, Oauth2PermissionGrant, AppRoleAssignment, periferiche, ServicePrincipal, TenantDetail, domini, ecc
La prossima cosa che ho provato è stata la password di Grant Resource proprietario (grant_type=password
), passando le mie credenziali in più, in modo che Posso impersonare me stesso nell'API Graph. Ora, il mio POST
per il punto finale applications
ha esito positivo.
La mia domanda bottom-of-the-line è: Posso concedere le autorizzazioni sufficienti per la mia applicazione in modo che io possa aggiungere applicazioni di programmazione utilizzando il flusso di credenziali del client, e non qualsiasi flusso che agisce per conto di un utente? E se sì, come è fatto?
ho trovato ancora una discussione che molto probabilmente si riduce a esattamente lo stesso problema che ho: https://social.technet.microsoft.com/Forums/en-US/82ab8a7d- e17b-4e4a-9615-2bdf43f1866a/graph-api-call-returns-insufficient-privileges-to-complete-the-operation? forum = WindowsAzureAD Inoltre, ho trovato anche la pagina in cui sono discussi i permessi dell'API Graph: https : //msdn.microsoft.com/Library/Azure/Ad/Graph/howto/azure-ad-graph-api-permission-scopes – donmartin
Forniscono la soluzione per il tuo problema? – juvchan
No, sfortunatamente no. Impersonare un amministratore è l'unica "soluzione" che ho trovato finora. – donmartin