J'ai une API web dotnet core 1.1 qui est protégée par Azure AD. Mon SPA Angular utilise Adal pour authentifier les utilisateurs. J'ai aussi une application démon qui effectue des tâches d'arrière-plan, elle utilise également l'API web pour appeler la fonctionnalité ou récupérer des données.Audience différente dans les jetons jwt pour l'application SPA et daemon
Il est en grande partie basé sur les exemples fournis par Microsoft que vous pouvez trouver here.
La grande différence est que j'utilise un middleware différent. L'API utilise le JwtBearerAuthentication
.UseJwtBearerAuthentication(new JwtBearerOptions
{
TokenValidationParameters = tokenValParam,
AutomaticAuthenticate = true,
AutomaticChallenge = false,
Authority = String.Format(Configuration["AzureAd:AadInstance"], Configuration["AzureAD:Tenant"]),
Audience = Configuration["AzureAd:Audience"],
})
Tokens dans l'application du démon sont créés par le code suivant:
var authContext = new AuthenticationContext("https://login.microsoftonline.com/##adId##);
var clientCredential = new ClientCredential("##serviceCredenitalKey##", "##serviceCredentialSecret##");
var result = await authContext.AcquireTokenAsync(##webApiUri##, clientCredential);
Le problème que je suis face est que les jetons générés par AD via adal pour la SPA ont le clientId de l'application client en tant qu'audience. Les jetons générés pour l'application démon n'ont pas clientId comme audience mais à la place l'uri de l'API web. Il n'existe aucun moyen de spécifier plusieurs audiences valides dans le middleware. Devrais-je utiliser mon propre validateur, y a-t-il un mécanicien intégré pour résoudre ce problème ou est-ce que je manque complètement le point?