protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var context = _callContextFactory.Create();

            SetHeaderParameter(request, HeaderNames.Authorization, context, x => x.AuthorizeInfo);

            return(await base.SendAsync(request, cancellationToken));
        }
예제 #2
0
        /// <summary>
        /// Создает контекст и заполняет его из JWT-токена
        /// и заголовков запроса
        /// </summary>
        /// <returns>Контекст с данными пользователя</returns>
        public ISecurityContext Create()
        {
            var callContext = _callContextFactory.Create();

            var permissions = GetPermissions(callContext);
            var ip          = _loopbackIpFilter.FilterIp(callContext.RequestCallerIp);

            return(new SecurityContext(callContext.UserId, ip, permissions));
        }
예제 #3
0
        /// <summary>
        /// Обогащает свойства сообщения данными из контекста вызова: пользователь, домаен и т.п.
        /// </summary>
        /// <param name="message">Сообщение, свойства которого нужно обогатить</param>
        protected void FillPropertiesFromCallContext(BaseMessage message)
        {
            var context = _callContextFactory.Create();

            message.Properties.Add(MessagingContextHeaders.UserId, context.UserId);
            message.Properties.Add(MessagingContextHeaders.UserDomain, context.UserDomain);
            message.Properties.Add(MessagingContextHeaders.RequestId, context.RequestId);
            message.Properties.Add(MessagingContextHeaders.RequestCallerIp, context.RequestCallerIp);
            message.Properties.Add(MessagingContextHeaders.AuthorizeInfo, context.AuthorizeInfo);
        }
예제 #4
0
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var context = _callContextFactory.Create();

            SetHeaderParameter(request, CompanyHttpHeaders.RequestId, context, x => x.RequestId);
            SetHeaderParameter(request, CompanyHttpHeaders.RequestHeaderCallerIp, context, x => x.RequestCallerIp);
            SetHeaderParameter(request, CompanyHttpHeaders.UserId, context, x => x.UserId);
            SetHeaderParameter(request, CompanyHttpHeaders.UserDomain, context, x => x.UserDomain);

            return(await base.SendAsync(request, cancellationToken));
        }
예제 #5
0
        /// <summary>
        /// Создает контекст и заполняет его из WindowsIdentity
        /// </summary>
        /// <returns>Контекст</returns>
        public ISecurityContext Create()
        {
            var callContext = _callContextFactory.Create();
            var httpContext = _httpContextAccessor.HttpContext;

            if (!(httpContext?.User?.Identity is WindowsIdentity identity) || !identity.IsAuthenticated)
            {
                identity = WindowsIdentity.GetCurrent();
            }

            var name = !string.IsNullOrWhiteSpace(callContext.UserId)
        ? callContext.UserId
        : identity.Name;

            var ip = _loopbackIpFilter.FilterIp(callContext.RequestCallerIp);

            return(new NtlmSecurityContext(CleanUserName(name), ip, _httpClientFactory));
        }