Мы находимся в среде .Net Core 2.2, в которой используется единый вход на основе WS-Federation.
При переходе на https://localhost:5001/api/app/Method - ожидается, что нас перенаправят на сайт SSO для входа в систему, но получит ошибку 500.
ocelot.json:
{
"ReRoutes": [
{
"DownstreamPathTemplate": "/api/app/{catchAll}",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5002
}
],
"UpstreamPathTemplate": "/api/app/{catchAll}",
"UpstreamHttpMethod": [ "GET", "POST"],
"AuthenticationOptions": {
"AuthenticationProviderKey": "TestKey"
}
},
],
"GlobalConfiguration": {
"BaseUrl": "https://localhost:5001"
}
}
Program.cs:
public static void Main(string[] args)
{
new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureAppConfiguration((hostingContext, config) =>
{
config
.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
.AddJsonFile("appsettings.json", true, true)
.AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", true, true)
.AddJsonFile($"{hostingContext.HostingEnvironment.ApplicationName}/ocelot.json")
.AddEnvironmentVariables();
})
.ConfigureServices(s => {
s.AddAuthentication().AddWsFederation("TestKey", options => {
options.MetadataAddress = "https://sso-site/FederationMetadata/2007-06/FederationMetadata.xml";
options.Wtrealm = "https://localhost:5001/";
options.Events.OnMessageReceived = ctx => {
return Task.CompletedTask;
};
});
s.AddOcelot();
})
.ConfigureLogging((hostingContext, logging) =>
{
Console.WriteLine("logging happened");
//add your logging
})
.UseIISIntegration()
.Configure(app =>
{
app.UseOcelot().Wait();
})
.Build()
.Run();
}
Какие-нибудь предложения относительно того, что мы можем делать неправильно?
Есть некоторые мысли, что WS-Fed не поддерживает аутентификацию в Ocelot. Мы следовали примеру конфигурации.