Exemplo n.º 1
0
        public override AsyncUnaryCall <TResponse> AsyncUnaryCall <TRequest, TResponse>(TRequest request, ClientInterceptorContext <TRequest, TResponse> context, AsyncUnaryCallContinuation <TRequest, TResponse> continuation)
        {
            var serverToken = tokenProvider.AcquireToken().GetAwaiter().GetResult();
            var userToken   = string.Empty;

            if (httpContextAccessor.HttpContext?.User?.Identity != null)
            {
                //TODO: serialize current user correctly
                var token = jwtHandler.CreateJwtSecurityToken(new SecurityTokenDescriptor
                {
                    Subject = (ClaimsIdentity)httpContextAccessor.HttpContext.User.Identity
                });
                userToken = jwtHandler.WriteToken(token);
            }

            if (context.Options.Headers != null)
            {
                if (!string.IsNullOrEmpty(serverToken))
                {
                    context.Options.Headers.Add("Authorization", $"bearer {serverToken}");
                }
                if (!string.IsNullOrEmpty(userToken))
                {
                    context.Options.Headers.Add("_user", $"{userToken}");
                }
            }
            return(continuation(request, context));
        }