передовой опыт или стандартный способ управления моими аутентифицированными пользовательскими данными с данными претензий - PullRequest
0 голосов
/ 10 октября 2019

Мне интересно, есть ли лучшая практика или стандартный способ управления моими пользовательскими данными с данными претензий.

Сценарий: пользователи входят в систему с использованием стороннего поставщика и перенаправляются обратно в мое приложение. Все, что у меня есть на данный момент, - это идентификатор, который отображается на профиль пользователя в нашей базе данных. Угловое приложение будет отправлять запросы к конечному интерфейсу API.

Поэтому мне интересно, куда поместить (скажем,) роли и флаги, которые пользователь имеет в нашей базе данных для ограничения доступа к маршруту и ​​других вещей.

Полагаю, я мог бы получать его при каждом запросе, но я вижу, что это добавляет некоторые накладные расходы.

Итак, я полагаю, у меня есть несколько вариантов: добавить мои данные в сеанс, добавить мои данные текущему пользователю (ClaimsPrincipal) или используйте кэширование. Все они имеют компромиссы. Блокировки сеанса, кэширование также имеет проблемы с синхронизацией, выборка каждого запроса имеет задержку, материал ClaimsPrincipal кажется неуправляемым?

im, используя net framework 4.7

Ссылка на код https://github.com/ricardosaracino/SamlNet


public class UserHandler : DelegatingHandler
    {
        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
            CancellationToken cancellationToken)
        {           
            var currentUser = HttpContext.Current.User as ClaimsPrincipal;

            var claims = currentUser?.Claims;
            var nameIdentifierClaim = claims?.FirstOrDefault(claim => claim.Type == ClaimTypes.NameIdentifier);
            var nameId = nameIdentifierClaim?.Value;

            // if NOT cached or expired 
            // read from database
            // set user in cache with nameid

            // set request.Properties from cache
            request.Properties["currentUser"] = new CurrentUser()
            {
                Id = Guid.NewGuid()
            };

            return base.SendAsync(request, cancellationToken).ContinueWith((task) =>
            {
                var a = request.Properties["currentUser"];

                // if modified add back to cache

                return task.Result;
            });
        }
    }

1 Ответ

0 голосов
/ 24 октября 2019

В итоге я использовал Owin с Cookie и заявками. Я был в состоянии легко перевести их в куки для состояния клиента и использовать их для разрешений.

Хороший ответ здесь

Подходит ли авторизация на основе утверждений для отдельных ресурсов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...