Beispiel #1
0
        public async Task Invoke(HttpContext context)
        {
            DownstreamRouteFinder downstreamRouteFinder = new DownstreamRouteFinder(_urlMatcher, _urlPathPlaceholderNameAndValueFinder);
            DownstreamRoute       route = downstreamRouteFinder.FindDownstreamRoute(context.Request.Path.ToString(), context.Request.Method, _ocelotConfigurationProvider.Get().Result.Data, context.Request.Headers["Host"]).Data;

            if (route.ReRoute.IsAuthenticated)
            {
                string token = context.Request.Headers["Token"];
                if (string.IsNullOrEmpty(token))
                {
                    AuthenticateResult.Fail("Unauthorized");
                    context.Response.StatusCode = 401; //Unauthorized

                    return;
                }

                var claims = new List <Claim>();
                claims.Add(new Claim(ClaimTypes.Name, "Shanzm"));
                claims.Add(new Claim(ClaimTypes.Role, "Users"));
                var identity = new ClaimsIdentity(claims, "WapIdentity");

                context.User = new ClaimsPrincipal(identity);
                var ticket = new AuthenticationTicket(context.User, new AuthenticationProperties(), "WapScheme");
                AuthenticateResult.Success(ticket);
            }

            await _next(context);
        }
Beispiel #2
0
        /// <summary>
        /// 初始化路由信息
        /// </summary>
        /// <param name="context"></param>
        private void MapDownstreamContextAsync(DownstreamContext context)
        {
            //1初始化配置文件
            context.Configuration = InternalConfigurationHelper.Instance().GetConfiguration();

            //2初始化下游请求对象
            DownstreamRequestMapper requestMapper = new DownstreamRequestMapper(context.HttpContext.Request);

            var downstreamRequest = requestMapper.Create();

            //如果有错误,把错误信息加载到context
            if (requestMapper.IsError)
            {
                SetPipelineError(context, requestMapper.GetError());
                return;
            }

            context.DownstreamRequest = downstreamRequest;

            //3查找下游请求路由
            DownstreamRouteFinder downstreamRouteFinder = new DownstreamRouteFinder();

            var downstreamRoute = downstreamRouteFinder.Get(context);

            if (downstreamRouteFinder.IsError)
            {
                SetPipelineError(context, downstreamRouteFinder.GetError());
                return;
            }

            context.DownstreamRoute = downstreamRoute;

            //4下游请求改写
            ResetDownsteamRequest(context);
        }