示例#1
0
 /// <summary>
 /// Ctor.
 /// </summary>
 /// <param name="httpClientFactory">Http client factory (without name).</param>
 /// <param name="jwtAuthorizationOptions">Authorization options for authorization service.</param>
 /// <param name="apiJwtAuthorizationOptions">Authorization options for api service.</param>
 /// <param name="userService">User service.</param>
 /// <param name="httpContextAccessor">Httpc context accessor</param>
 public AuthorizationService(
     IHttpClientFactory httpClientFactory,
     IOptions <JwtAuthorizationOptions> jwtAuthorizationOptions,
     IOptions <ApiJwtAuthorizationOptions> apiJwtAuthorizationOptions,
     IUserService userService,
     IHttpContextAccessor httpContextAccessor)
 {
     _httpClientFactory          = Check.NotNull(httpClientFactory, nameof(httpClientFactory));
     _apiJwtAuthorizationOptions = Check.NotNull(apiJwtAuthorizationOptions, nameof(apiJwtAuthorizationOptions)).Value;
     _jwtAuthorizationOptions    = Check.NotNull(jwtAuthorizationOptions, nameof(jwtAuthorizationOptions)).Value;
     _userService         = Check.NotNull(userService, nameof(userService));
     _httpContextAccessor = Check.NotNull(httpContextAccessor, nameof(httpContextAccessor));
 }
        public static IServiceHostServerBuilder UseJoseJwtForOAuth <T>(this IServiceHostServerBuilder serviceHostBuilder, JwtAuthorizationOptions options) where T : JimuAddress, new()
        {
            serviceHostBuilder.AddInitializer(container =>
            {
                var logger = container.Resolve <ILogger>();
                logger.Info($"[config]use jose.jwt for OAuth");

                var server     = container.Resolve <IServer>();
                var serializer = container.Resolve <ISerializer>();
                server.UseMiddleware <JwtAuthorizationMiddleware>(options, serializer);

                if (string.IsNullOrEmpty(options.TokenEndpointPath))
                {
                    return;
                }
                var discovery = container.Resolve <IServiceDiscovery>();
                var addr      = new T
                {
                    Ip   = options.ServerIp,
                    Port = options.ServerPort
                };
                var tokenRoute = new List <JimuServiceRoute> {
                    new JimuServiceRoute
                    {
                        Address = new List <JimuAddress> {
                            addr
                        },
                        ServiceDescriptor = new JimuServiceDesc
                        {
                            Id        = options.GetServiceId(),
                            RoutePath = options.TokenEndpointPath
                        }
                    }
                };
                discovery.ClearServiceAsync(tokenRoute.First().ServiceDescriptor.Id);
                //discovery.SetRoutesAsync(tokenRoute);
                discovery.AddRouteAsync(tokenRoute);
            });
            return(serviceHostBuilder);
        }
示例#3
0
        public static IServiceHostServerBuilder UseJoseJwtForOAuth <T>(this IServiceHostServerBuilder serviceHostBuilder, JwtAuthorizationOptions options) where T : JimuAddress, new()
        {
            serviceHostBuilder.AddInitializer(container =>
            {
                var logger = container.Resolve <ILogger>();
                logger.Info($"[config]use jose.jwt for OAuth");

                while (!container.IsRegistered <IServer>() || !container.IsRegistered <IServiceDiscovery>())
                {
                    Thread.Sleep(200);
                }
                var server     = container.Resolve <IServer>();
                var serializer = container.Resolve <ISerializer>();
                server.UseMiddleware <JwtAuthorizationMiddleware>(options, serializer);

                if (string.IsNullOrEmpty(options.TokenEndpointPath))
                {
                    return;
                }
                var discovery = container.Resolve <IServiceDiscovery>();
                var addr      = new T
                {
                    Ip   = options.ServerIp,
                    Port = options.ServerPort
                };
                var tokenRoute = new List <JimuServiceRoute> {
                    new JimuServiceRoute
                    {
                        Address = new List <JimuAddress> {
                            addr
                        },
                        ServiceDescriptor = new JimuServiceDesc
                        {
                            Id         = options.GetServiceId(),
                            RoutePath  = options.TokenEndpointPath,
                            Parameters = serializer.Serialize <string>(new List <JimuServiceParameterDesc> {
                                new JimuServiceParameterDesc
                                {
                                    Comment = "username",
                                    Format  = "System.String",
                                    Name    = "username",
                                    Type    = "object"
                                },
                                new JimuServiceParameterDesc
                                {
                                    Comment = "password",
                                    Format  = "System.String",
                                    Name    = "password",
                                    Type    = "object"
                                },
                            }),
                            ReturnDesc = serializer.Serialize <string>(new JimuServiceReturnDesc {
                                Comment      = "Token",
                                ReturnType   = "object",
                                ReturnFormat = "{\"access_token\":\"System.String | token\", \"expired_in\":\"System.Int32 | expired timestamp which is the number of seconds between 1970-01-01 and expired datetime\"}"
                            })
                        }
                    }
                };
                discovery.ClearServiceAsync(tokenRoute.First().ServiceDescriptor.Id).Wait();
                //discovery.SetRoutesAsync(tokenRoute);
                discovery.AddRouteAsync(tokenRoute).Wait();
            });
            return(serviceHostBuilder);
        }
        public static IServiceHostServerBuilder UseJwtForOAuth(this IServiceHostServerBuilder serviceHostBuilder, JwtAuthorizationOptions options)
        {
            serviceHostBuilder.AddRunner(container =>
            {
                ILogger logger = container.Resolve <ILogger>();
                logger.Info($"[config]use jwt for OAuth");

                while (!container.IsRegistered <IServer>() || !container.IsRegistered <IServiceDiscovery>())
                {
                    Thread.Sleep(200);
                }
                IServer server         = container.Resolve <IServer>();
                ISerializer serializer = container.Resolve <ISerializer>();
                server.UseMiddleware <JwtAuthorizationMiddleware>(options, serializer);

                if (string.IsNullOrEmpty(options.TokenEndpointPath))
                {
                    return;
                }

                if (options.ServerIp == "localhost" || options.ServerIp == "127.0.0.1")
                {
                    IServiceDiscovery discovery = container.Resolve <IServiceDiscovery>();
                    ServerAddress addr          = new ServerAddress(options.ServerIp, options.ServerPort);

                    List <ServiceRoute> tokenRoute = new List <ServiceRoute> {
                        new ServiceRoute
                        {
                            Address = new List <ServerAddress> {
                                addr
                            },
                            ServiceDescriptor = new ServiceDesc
                            {
                                Id         = options.TokenEndpointPath.TrimStart('/'),
                                RoutePath  = options.TokenEndpointPath,
                                HttpMethod = "Post",
                                Parameters = serializer.Serialize <string>(new List <ServiceParameterDesc> {
                                    new ServiceParameterDesc
                                    {
                                        Comment = "username",
                                        Format  = "System.String",
                                        Name    = "username",
                                        Type    = "object"
                                    },
                                    new ServiceParameterDesc
                                    {
                                        Comment = "password",
                                        Format  = "System.String",
                                        Name    = "password",
                                        Type    = "object"
                                    },
                                }),
                                ReturnDesc = serializer.Serialize <string>(new ServiceReturnDesc {
                                    Comment      = "Token",
                                    ReturnType   = "object",
                                    ReturnFormat = "{\"access_token\":\"System.String | token\", \"expired_in\":\"System.Int32 | expired timestamp which is the number of seconds between 1970-01-01 and expired datetime\"}"
                                })
                            }
                        }
                    };
                    discovery.ClearServiceAsync(tokenRoute.First().ServiceDescriptor.Id).Wait();
                    //discovery.SetRoutesAsync(tokenRoute);
                    discovery.AddRouteAsync(tokenRoute).Wait();
                }
            });
            return(serviceHostBuilder);
        }