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