Sto tentando di autenticare un'app HTML contro un'app di Servizio mobile di Azure.Autentica contro un'app di servizio mobile di Azure con token acquisito ADAL.js
L'installazione
Entrambe le applicazioni utilizzano DAA come autenticazione back-end, in modo da entrambe le applicazioni avere un'applicazione registrata in Active Directory:
Azure Mobile Service app:
- configurato come descritto nel https://azure.microsoft.com/en-gb/documentation/articles/mobile-services-how-to-register-active-directory-authentication/
- Ho modificato il manifest per abilitare il flusso del client
- Abilita "single sign-on e leggere i profili degli utenti" sotto "le autorizzazioni per altre applicazioni" per "Windows Azure Active Directory"
HTML app:
- in "le autorizzazioni per altre applicazioni" ho aggiunto l'applicazione Azure Mobile Service con la delegato permesso "accesso"
del servizio mobile Azure utilizza un backend .NET, dove ho inserito e configurato il pacchetto NuGet "Microsoft Azure mobile Servizi .NET backend Security Extension", come descritto in https://azure.microsoft.com/en-gb/documentation/articles/mobile-services-dotnet-backend-windows-phone-get-started-users/
L'applicazione utilizza HTML ADAL.JS e angolare:
adalAuthenticationServiceProvider.init(
{
// Config to specify endpoints and similar for your app
clientId: "<html app aad client id>",
redirectUri: "<html app redirect uri>",
endpoints: {
'<AMS app client id>': 'https://ampapp.azure-mobile.net/'
}
},
$httpProvider
);
Questa configurazione funziona come previsto, apro il mio html app, l'autenticazione AD Azure, ottenere un reindirizzamento al mio app e ho effettuato l'accesso. Inoltre, quando provo ad accedere al servizio mobile di Azure, vedo che Adal.js inietta il token bearer.
Il problema
Il token portatore non è accettata dalla Azure Mobile Service - Ho un 401 non autorizzato. Non so perché, ma il Servizio mobile di Azure utilizza la propria intestazione di autenticazione, ma ok.
MSDN definisce un cosiddetto "operazione di login del cliente-diretto" per l'Azure Mobile Service:
"richiede un token di autenticazione di Microsoft Azure Mobile Services utilizzando un token di identità già ottenuta da un provider di identità." (https://msdn.microsoft.com/en-us/library/azure/jj710106.aspx)
Ok, così lascia fare questo:
// obtain token for Azure Mobile Service from Adal.js
var token = this.getAADToken(ZUMOAuthenticationProvider.Config().url);
$http({
method: 'POST',
url: ZUMOAuthenticationProvider.Config().url + 'login/aad',
data: JSON.stringify({
"access_token" : token
}),
headers: {
'X-ZUMO-APPLICATION': '<application key>'
}).
success(function (data, status, headers, config) {
alert(data);
}).
error(function (data, status, headers, config) {
alert(data);
});
Nota: Il token acquisita dalla prima linea è in realtà un token di accesso per l'applicazione azzurro servizio di aad mobili e non per l'applicazione HTML.
Questa richiesta POST ottiene anche una risposta 401. Quindi non so come autenticare la mia app. Ho anche provato il servizio mobile di azure js lib. Questa libreria funziona, ma usa un popup per l'autenticazione, ma non mi piace aggiungere un'altra libreria ai miei progetti solo per alcune chiamate REST.
problemi simili
Quando si cerca di risolvere i miei problemi ho trovato altro post StackOverflow:
Why isn't my Azure Mobile Service accepting the bearer token ADAL.js is sending it?
- stesso problema, nessuna soluzione (anche in chatlog collegato nel ultimo commento)
How do I secure an Azure Mobile Service with Azure AD? ADAL.JS
- stesso autore come sopra, ho controllato tutto ciò di cui nella risposta accettata, ma non funziona
ho anche preso uno sguardo alle nuove applicazioni mobili Azure dal nuovo portale di gestione Azure ma sembra che stanno usando lo stesso meccanismo di autenticazione.
Quindi, come posso farlo funzionare?
Quindi, hai impostato due app in AAD? Hai abilitato il flusso client su entrambi? – PilotBob
Sì, 2 app in Azure AD, entrambi i flussi client sono abilitati perché entrambi devono essere in grado di autenticarsi tramite JS. Importante: l'app HTML deve essere concessa per accedere al servizio mobile di Azure –
puoi inviarmi un esempio del JWT che stai inviando all'endpoint/login/aad in modo da poterlo confrontare con il mio. – PilotBob