11

Я пытаюсь внедрить веб-приложение с использованием архитектуры микросервиса, разбив основные компоненты на отдельные веб-серверы. Я реализую сервер аутентификации с использованием идентификатора ASP.NET (только для входа в систему электронной почты/имени пользователя, без Facebook и т. Д.) И «основного» сервера приложений.ASP.NET Identity в архитектуре Microservice

Мой текущий вызов - выяснить, как сервер приложений распознает, зарегистрировал ли пользователь сервер аутентификации. Поскольку сервер аутентификации генерирует токены, которые пользователи проверяют для идентификации пользователей, я полагаю, что они где-то хранятся и могут быть запрошены сервером приложений, но я не уверен, как это сделать. В идеале, мои серверы приложений WebAPI endpoints смогут использовать аннотацию [Authorize].

В: Как один сервер может контролировать доступ через отдельный сервер аутентификации с использованием идентификатора ASP.NET?

ответ

10

Я сделал что-то подобное, делая следующее (используя аутентификацию печенья):

1 - установить домен куки, чтобы быть TLD на всех сайтах

Мой Startup.Auth.cs выглядит следующим образом:

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 - обновление web.config всех сайтов, чтобы использовать один и тот же <machineKey />

Mine выглядит следующим образом:

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

Теперь я могу выполнять операции входа в систему, скажем, account.example.com и перенаправить пользователя на site1.example.com, и они будут рассматриваться как проверку подлинности.

+0

Поскольку api не имеет гражданства, он не будет искать файлы cookie, не так ли? Насколько мне известно, он ищет только заголовок аутентификации. Как это работает для API? Я планирую сохранить API внутри моего проекта MVC, поэтому api будет на example.com/api, будет ли это работать? – CularBytes

+2

Итак, вы можете использовать токены-носители. Ключ состоит в том, что машинные ключи одинаковы на всех машинах, иначе токен не может быть расшифрован. –

Смежные вопросы