/OcelotSample

Ocelot的权限验证测试项目。

Primary LanguageTypeScript

OcelotSample

Ocelot的测试项目。

所有项目配置文件:appsettings.json

"Audience": { "Secret": "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890", "Issuer": "gsw", "Audience": "everone" }

Ocelot网关

Program.cs
public class Program
{
    public static void Main(string[] args)
    {
        Console.Title = "OcelotGateway";
        IWebHostBuilder builder = new WebHostBuilder();
        builder.ConfigureServices(service =>
        {
            service.AddSingleton(builder);
        });
        builder.UseKestrel()
               .UseContentRoot(Directory.GetCurrentDirectory())
               .UseIISIntegration()
               .UseStartup<Startup>()
               .UseApplicationInsights();
        var host = builder.Build();
        host.Run();
    }      
}
Startup.cs
public class Startup
{
    public Startup(IHostingEnvironment environment)
    {
        var builder = new Microsoft.Extensions.Configuration.ConfigurationBuilder();
        builder.SetBasePath(environment.ContentRootPath)
               .AddJsonFile("appsettings.json", false, reloadOnChange: true)
               .AddJsonFile($"appsettings.{environment.EnvironmentName}.json", optional: false, reloadOnChange: true)
               //添加ocelot配置文件
               .AddJsonFile("configuration.json", optional: false, reloadOnChange: true)
               .AddEnvironmentVariables();
        Configuration = builder.Build();
    }
    public IConfigurationRoot Configuration { get; }
    public void ConfigureServices(IServiceCollection services)
    {
        var audienceConfig = Configuration.GetSection("Audience");
        //注入OcelotJwtBearer
        services.AddOcelotJwtBearer(audienceConfig["Issuer"], audienceConfig["Issuer"], audienceConfig["Secret"], "GSWBearer");

        //注放Ocelot
        services.AddOcelot(Configuration, (x) =>
        {
            x.WithMicrosoftLogging(log =>
            {
                log.AddConsole(LogLevel.Debug);
            }).WithDictionaryHandle();
        });
    }
    public async void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        await app.UseOcelot();
    }
}

分发Token项目

Startup.cs
  public class Startup
    {
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    public IConfiguration Configuration { get; }
    public void ConfigureServices(IServiceCollection services)
    {
        var audienceConfig = Configuration.GetSection("Audience");
        //注入OcelotJwtBearer
        services.AddJTokenBuild(audienceConfig["Issuer"], audienceConfig["Issuer"], audienceConfig["Secret"], "/api/denied");
        services.AddMvc();
    }
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseMvc();
    }
}

业务项目

Startup.cs
public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }


    public void ConfigureServices(IServiceCollection services)
    { 
        //读取配置文件
        var audienceConfig = Configuration.GetSection("Audience");
        services.AddOcelotPolicyJwtBearer(audienceConfig["Issuer"], audienceConfig["Issuer"], audienceConfig["Secret"], "GSWBearer", "Permission", "/hisapi/denied");

        //这个集合模拟用户权限表,可从数据库中查询出来
        var permission = new List<Permission> {                            
                          new Permission {  Url="/hisapi/hisuser", Name="system"},
                          new Permission {  Url="/", Name="system"}
                      };
        services.AddSingleton(permission);
        services.AddMvc();
    }

 
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvc();
    }
}