У меня есть следующая архитектура:
- Веб-сайт, которому требуется контроль ролей и аутентификация пользователя.
- 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 для контроля доступа.
Если мое описание неполное, я с удовольствием отвечу на ваши вопросы. Заранее спасибо.
РЕДАКТИРОВАТЬ: Вот ссылка , показывающая, как использовать стороннюю проверку подлинности, а затем использовать ее в своем приложении, поэтому, я думаю, я должен иметь возможность использовать МОЮ стороннюю проверку подлинности, а затем использовать ее в мой веб-сайт. Вы уже сделали это?