/// <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)); }
/// <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)); }
/// <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)); }