11

Próbuję zaimplementować aplikację internetową przy użyciu architektury mikroserwisu, dzieląc główne komponenty na oddzielne serwery WWW. Wdrażam serwer uwierzytelniający przy użyciu tożsamości ASP.NET (tylko loginy e-mail/nazwa użytkownika, brak Facebooka itp.) I "główny" serwer aplikacji.Identyfikacja ASP.NET w architekturze Microservice

Moje obecne wyzwanie polega na ustaleniu, w jaki sposób serwer aplikacji rozpozna, czy użytkownik zalogował się przez serwer uwierzytelniania. Ponieważ serwer uwierzytelniania generuje tokeny, które użytkownicy mogą zweryfikować tożsamości użytkowników, wyobrażam sobie, że są one przechowywane gdzieś i mogą być sprawdzane przez serwer aplikacji, ale nie jestem pewien, jak to zrobić. Idealnie, moje punkty końcowe WebAPI serwerów aplikacji będą mogły korzystać z adnotacji [Authorize].

P: W jaki sposób jeden serwer może kontrolować dostęp za pośrednictwem oddzielnego serwera uwierzytelniania przy użyciu identyfikatora ASP.NET?

Odpowiedz

10

robiłem coś podobnego, wykonując następujące (przy użyciu uwierzytelniania cookie):

1 - ustawienie domeny ciasteczka być TLD we wszystkich witrynach

My Startup.Auth.cs wygląda następująco:

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 - zaktualizuj web.config wszystkich witryn korzystać z tego samego <machineKey />

Kopalnia wygląda następująco:

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

Teraz mogę wykonywać operacje logowania na, powiedzmy, account.example.com i przekierować użytkownika do site1.example.com i będą postrzegane jako uwierzytelnione.

+0

Ponieważ api jest bezpaństwowcem, nie szuka plików cookie, prawda? Według mojej wiedzy szuka tylko nagłówka uwierzytelnienia. Jak to działałoby w przypadku interfejsu API? Mam zamiar zachować API w moim projekcie MVC, więc api będzie na example.com/api, czy to też działa? – CularBytes

+2

Możesz więc użyć tokenów na okaziciela. Kluczem jest to, że klucze maszynowe są takie same na różnych komputerach, w przeciwnym razie tokena nie można odszyfrować. –

Powiązane problemy