如何使用 Azure Active Directory 设置 Ocelot Api 网关

MSK*_*MSK 2 azure azure-active-directory asp.net-core asp.net-core-webapi ocelot

我遵循教程并设法将 api 与 Azure Active Directory 身份验证和授权结合使用。

但是我想从 Ocelot Api Gateway 后面使用 api。我可以将 ocelot 与自定义基本授权一起使用,但无法与 Azure Active Directory 一起使用。

我已经将 Ocelot api 网关 url 添加到我的 api 重定向 url 列表中。

我应该如何在 config.json 和 Ocelot Api Gateway 项目 StartUp.cs 中设置 ReRoutes 值?

任何帮助将不胜感激。

MSK*_*MSK 5

最终我可以。首先感谢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"
  }
}    
Run Code Online (Sandbox Code Playgroud)

4-编辑 Program.cs 中的 CreateWebHostBuilder 方法,以便 ocelot.json 用作附加配置源。

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

5-在 Startup.cs 中编辑 ConfigureServices 和 Configure 方法,如下所示

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();
        }
Run Code Online (Sandbox Code Playgroud)

6-最后但并非最不重要的是,您应该将 AzureAd 配置添加到 ocelot api 网关项目。(参考教程应该与 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": "*"

}
Run Code Online (Sandbox Code Playgroud)

我希望这个答案可以节省某人的时间并使他们的生活更快乐:)

快乐编码!