1

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?

Répondre

0

Le moyen le plus simple que je puisse imaginer serait d'essayer de configurer toutes vos applications clientes en utilisant la même adresse (public), identifiant client ou adresse URL. Vous pouvez utiliser l'ID client comme ressource lors de l'acquisition d'un jeton pour votre API web dans l'application démon, et l'API web accepte l'ID client comme audience validée. Si vous voulez soutenir plusieurs publics dans votre API web, vous devez écrire votre propre validateur.