Loading

.NetCore Grpc 客服端 工厂模式配置授权

services.AddGrpcClient<UserFinder.UserFinderClient>(options =>
            {
                options.Address = new Uri(configuration.GetValue<string>("GrpcUrls:UserFind"));
            }).ConfigureHttpClient((service, client) =>
            {
                var http = service.GetService<IHttpContextAccessor>();
                var token = "";
                var has = http?.HttpContext?.Request?.Headers?.TryGetValue("Authorization", out var tokens);
                if (has.HasValue)
                {
                    token = tokens.First().Remove(0, 7);
                }
                client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
            });

本例是服务端 调用 Grpc service ,也就是webapi 服务端 调用 grpc 服务,因为 webapi 中存在 token , 所以直接在 request -> headers 中取 Authorization 的值 去掉 Bearer空格 7个字符 得到token

 public class UserFindService
    {
        private readonly UserFinder.UserFinderClient _client;

        public UserFindService(UserFinder.UserFinderClient client, IHttpContextAccessor httpContextAccessor)
        {
            _client = client;
            CancellationToken = httpContextAccessor?.HttpContext?.RequestAborted ?? default;
        }

        protected CancellationToken CancellationToken { get; }

        public UserDataViewModel FindUser(string userid)
        {
            var user = _client.FindUser(request: new UserRequest { UserId = userid }, cancellationToken: CancellationToken);
            if (user == null) return null;
            return new UserDataViewModel
            {
                UserId = user.UserId,
                UserName = user.UserName,
                AvatarUrl = user.AvatarUrl,
                NickName = user.NickName,
                PhoneNumber = user.PhoneNumber,
                RealName = user.RealName,
                Email = user.Email,
                Gender = user.Gender,
                Country = user.Country,
                Province = user.Province,
                City = user.City,
                Authenticated = user.Authenticated
            };
        }
}

 

posted @ 2020-03-20 00:24  microestc  阅读(678)  评论(0编辑  收藏  举报