Как настроить Ocelot Api Gateway с Azure Active Directory - PullRequest
1 голос
/ 06 мая 2019

Я следовал этому учебнику и смог использовать API с аутентификацией и авторизацией Azure Active Directory.

Однако я бы хотел использовать API из-за шлюза Ocelot Api.Я мог бы использовать ocelot с пользовательской базовой авторизацией, но не смог выполнить с Azure Active Directory.

Я уже добавил URL-адрес шлюза API Ocelot в мой список URL перенаправления API.

Как мне установить значения ReRoutes в config.json и проекте Ocelot Api Gateway StartUp.cs?

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 07 мая 2019

В конце концов я мог.Прежде всего, благодаря библиотеке ocelot, поскольку она поддерживает авторизацию Azure Active Directory.

Я предполагаю, что вы уже можете пройти этот учебник.

1-Создайте проект шлюза ocelot api как обычно.

2-Добавьте библиотеку классов Microsoft.Identity.Web в проект ocelot в качестве ссылки

3-Добавьте ocelot.json, и она должна выглядеть примерно так:

    {
  "ReRoutes": [

    {
      "DownstreamPathTemplate": "/api/{catchAll}",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 44351
        }
      ],
      "UpstreamPathTemplate": "/to-do-service/api/{catchAll}",

      "AuthenticationOptions": {
        "AuthenticationProviderKey": "AzureADJwtBearer",
        "AllowedScopes": []
      }
    }

  ],
  "GlobalConfiguration": {
    "BaseUrl": "http://localhost:7070",
    "RequestIdKey": "OcRequestId",
    "AdministrationPath": "/administration"
  }
}    

4-Измените метод CreateWebHostBuilder в Program.cs так, чтобы ocelot.json использовался в качестве дополнительного источника конфигурации.

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
             .ConfigureAppConfiguration((hostingContext, config) =>
             {
                 config.AddJsonFile("ocelot.json", false, false);
             })
                .UseStartup<Startup>();

5-Edit ConfigureServices и Configure методы в Startup.cs, как показано ниже

public void ConfigureServices(IServiceCollection services)
        {
            services.AddProtectWebApiWithMicrosoftIdentityPlatformV2(Configuration); //this extension comes from Microsoft.Identity.Web class library

            services.AddOcelot(Configuration);
            //services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public async void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            await app.UseOcelot();
        }

6-И последнее, но не менее важное: вы должны добавить свою конфигурацию AzureAd в проект шлюза API ocelot.(Это должно быть то же самое, что и ToDoListService для справочного руководства). Вы можете увидеть пример appsettings.json.

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "client-id-guid-from-azure-ad",

    /*
      You need specify the TenantId only if you want to accept access tokens from a single tenant (line of business app)
      Otherwise you can leave them set to common
    */
    "Domain": "blablabla.onmicrosoft.com", // for instance contoso.onmicrosoft.com. Not used in the ASP.NET core template
    "TenantId": "tenant-id-guid-from-azure-ad" // A guid (Tenant ID = Directory ID) or 'common' or 'organizations' or 'consumers'
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"

}

Надеюсь, этот ответ сэкономит кому-то время и сделает их жизнь счастливее:)

Удачного кодирования!

...