Идентификация ASP.NET в архитектуре Microservice

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

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

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

Ответ 1

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

1 - установить домен cookie как 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 />

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

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

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