Пример #1
0
        /// <summary>
        /// Создает контекст и заполняет его из WindowsIdentity
        /// </summary>
        /// <returns>Контекст</returns>
        public ISecurityContext Create()
        {
            var context  = _httpContextAccessor.HttpContext;
            var identity = context?.User?.Identity as WindowsIdentity;

            if (identity is null || !identity.IsAuthenticated)
            {
                identity = WindowsIdentity.GetCurrent();
            }

            var request = context?.Request;

            var name = request != null && request.Headers.Keys.Contains(CompanyHttpHeaders.UserId)
        ? request.Headers[CompanyHttpHeaders.UserId]
                       .ToString()
        : identity.Name;

            var ip = request != null && request.Headers.Keys.Contains(CompanyHttpHeaders.RequestHeaderCallerIp)
        ? context.Request.Headers[CompanyHttpHeaders.RequestHeaderCallerIp]
                     .ToString()
        : context?.Connection?.RemoteIpAddress?.MapToIPv4()
                     .ToString();

            ip = _loopbackIpFilter.FilterIp(ip);

            return(new NtlmSecurityContext(CleanUserName(name), ip, _httpClientFactory));
        }
Пример #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));
        }
        /// <summary>
        /// Создает контекст и заполняет его из JWT-токена
        /// и заголовков запроса
        /// </summary>
        /// <returns>Контекст с данными пользователя</returns>
        public ISecurityContext Create()
        {
            var context  = _httpContextAccessor.HttpContext;
            var identity = context?.User?.Identity;

            if (identity is null || !identity.IsAuthenticated)
            {
                // NOTE: Данная ситуация возможна только при наличии AllowAnonymous-аттрибута
                Logger.LogWarning("Invalid token");
                identity = null;
            }

            var username    = string.Empty;
            var permissions = new string[0];

            if (identity != null)
            {
                username = context.User?.Claims
                           ?.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)
                           ?.Value;

                var contextPermissions = context.User?.Claims
                                         ?.Where(x => x.Type == ClaimTypes.Role)
                                         .Select(x => x.Value)
                                         .ToArray();
                if (contextPermissions != null)
                {
                    permissions = contextPermissions;
                }
            }

            var request = context?.Request;

            if (string.IsNullOrEmpty(username))
            {
                username = request != null && request.Headers.Keys.Contains(CompanyHttpHeaders.UserId)
          ? request.Headers[CompanyHttpHeaders.UserId]
                           .ToString()
          : Environment.UserName;
            }

            var ip = request != null && request.Headers.Keys.Contains(CompanyHttpHeaders.RequestHeaderCallerIp)
        ? context.Request.Headers[CompanyHttpHeaders.RequestHeaderCallerIp]
                     .ToString()
        : context?.Connection?.RemoteIpAddress?.MapToIPv4()
                     .ToString();

            ip = _loopbackIpFilter.FilterIp(ip);

            return(new SecurityContext(username, ip, permissions));
        }
Пример #4
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));
        }