11

Sto tentando di implementare un'app Web utilizzando un'architettura microservice suddividendo i componenti principali in server Web separati. Sto implementando un server di autenticazione usando l'identità ASP.NET (solo login e-mail/username, niente Facebook, ecc.) E un server delle applicazioni "principale".Identità ASP.NET nell'architettura Microservice

La mia sfida attuale è capire come il server delle applicazioni riconoscerà se un utente ha effettuato l'accesso tramite il server di autenticazione. Poiché il server di autenticazione genera token che gli utenti verificano per identificare le identità degli utenti, immagino che siano memorizzati da qualche parte e possano essere interrogati dal server delle applicazioni, ma non sono sicuro di come procedere. Idealmente, gli endpoint WebAPI dei miei server delle applicazioni saranno in grado di utilizzare l'annotazione [Autorizza].

D: Come può un server controllare l'accesso tramite un server di autenticazione separato utilizzando l'identità ASP.NET?

risposta

10

Ho fatto qualcosa di simile facendo il (autenticazione tramite cookie) seguente:

1 - impostare il dominio dei cookie di essere il dominio di primo livello in tutti i siti web

mio Startup.Auth.cs simile a questa:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      LoginPath = new PathString("/Account/Login"), 
      Provider = new CookieAuthenticationProvider 
      { 
       OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
        validateInterval: TimeSpan.FromMinutes(30), 
        regenerateIdentity: (manager, user) => { 
         var identity = manager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie); 

         //some additional claims and stuff specific to my needs 
         return Task.FromResult(identity); 
        }) 
      }, 
      CookieDomain = ".example.com" 
     }); 

2 - aggiornare il web.config di tutti i siti web di utilizzare lo stesso <machineKey />

Il mio aspetto:

<machineKey 
    decryption="Auto" 
    decryptionKey="my_key" 
    validation="HMACSHA512" 
    validationKey="my_other_key" /> 

Ora posso eseguire operazioni d'accesso, diciamo, account.example.com, e reindirizzare l'utente a site1.example.com e saranno visti come autenticato.

+0

Poiché un API è senza stato, non cercherebbe i cookie, vero? Per quanto ne so, cerca solo un'intestazione di autenticazione. Come funzionerebbe per un'API? Sto pensando di mantenere l'API all'interno del mio progetto MVC, quindi l'API sarebbe su example.com/api, funzionerebbe anche questo? – CularBytes

+2

Quindi puoi usare i token al portatore. La chiave è che le chiavi della macchina sono le stesse su tutte le macchine, altrimenti il ​​token non può essere decodificato. –