C # Web MVC + API - Autin Authentication, получить претензии на сайте? - PullRequest
0 голосов
/ 27 июня 2018

У меня есть следующая архитектура:

enter image description here

  • Веб-сайт, которому требуется контроль ролей и аутентификация пользователя.
  • API, который обрабатывает аутентификации через OWIN, получая электронную почту / pwd и проверяя, существует ли пользователь в БД. Если это так, он создает претензии и отправляет их обратно на веб-сайт.

Вот код аутентификации OWIN:

                OnGrantResourceOwnerCredentials = async context =>
            {
                Trainer trainer = Datastore.SignInTrainer(context.UserName, context.Password);
                if (trainer != null)
                {
                    var claimsIdentity = new ClaimsIdentity(context.Options.AuthenticationType);
                    claimsIdentity.AddClaim(new Claim("Email", context.UserName));
                    claimsIdentity.AddClaim(new Claim("Id", trainer.Id.ToString()));
                    claimsIdentity.AddClaim(new Claim("Firstname", trainer.Firstname));
                    claimsIdentity.AddClaim(new Claim("Lastname", trainer.Lastname));
                    claimsIdentity.AddClaim(new Claim("UserType", "Trainer"));
                    claimsIdentity.AddClaim(new Claim(ClaimTypes.Role, "Trainer"));

                    trainer.UpdateLastApiLogon();

                    context.Validated(claimsIdentity);
                    return;
                }

                Administrator administrator = Datastore.SignInAdministrator(context.UserName, context.Password);
                if (administrator != null)
                {
                    var claimsIdentity = new ClaimsIdentity(context.Options.AuthenticationType);
                    claimsIdentity.AddClaim(new Claim("Email", context.UserName));
                    claimsIdentity.AddClaim(new Claim("Id", administrator.Id.ToString()));
                    claimsIdentity.AddClaim(new Claim("Firstname", administrator.Firstname));
                    claimsIdentity.AddClaim(new Claim("Lastname", administrator.Lastname));
                    claimsIdentity.AddClaim(new Claim("UserType", "Administrator"));
                    claimsIdentity.AddClaim(new Claim(ClaimTypes.Role, "Administrator"));

                    administrator.UpdateLastApiLogon();

                    context.Validated(claimsIdentity);
                    return;
                }

                context.Rejected();
            },

Моя проблема в том, что и API, и контроллеры веб-сайта нуждаются в регулировании доступа с проверкой ролей, потому что у меня разные типы пользователей (тренер / администратор).

Прямо сейчас с веб-сайта я правильно аутентифицируюсь на API и могу получить токен, но могу ли я получить закодированные претензии на веб-сайте? Как только проверка подлинности в API завершена и я получил маркер на веб-сайте, как я могу управлять доступом на веб-сайте?

Моя текущая опция - сохранить токен на предъявителя, извлечь объект Trainer / administrator из API, сохранить нужные данные в кеше, а затем проверить, существуют ли данные для управления доступом к контроллерам. Но я уверен, что это плохой вариант, и я мог бы использовать OWIN для контроля доступа.

Если мое описание неполное, я с удовольствием отвечу на ваши вопросы. Заранее спасибо.

РЕДАКТИРОВАТЬ: Вот ссылка , показывающая, как использовать стороннюю проверку подлинности, а затем использовать ее в своем приложении, поэтому, я думаю, я должен иметь возможность использовать МОЮ стороннюю проверку подлинности, а затем использовать ее в мой веб-сайт. Вы уже сделали это?

...