У нас есть Micro Services, разрабатываемые на платформе Service Fabric, которые развернуты в автономном локальном кластере.У нас есть веб-сайт, который настроен на использование проверки подлинности Windows, а затем вошедший в систему пользователь олицетворяет для получения отчетов SSRS.Мы использовали HttpSys для создания веб-хостинга.И мы сталкиваемся с проблемой двойного прыжка, когда к веб-сайту обращаются с любого сервера, кроме самого окна приложения.
Код для службы без сохранения состояния выглядит следующим образом:
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new ServiceInstanceListener[]
{
new ServiceInstanceListener(serviceContext =>
new HttpSysCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) =>
{
return new WebHostBuilder()
.UseHttpSys(
options =>
{
options.Authentication.Schemes = AuthenticationSchemes.Negotiate | AuthenticationSchemes.NTLM;
options.Authentication.AllowAnonymous = false;
}
)
.ConfigureServices(
services => services
.AddSingleton<StatelessServiceContext>(serviceContext))
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
.UseUrls(url)
.Build();
}))
};
}
В Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthenticationCore(options =>
{
options.DefaultScheme = HttpSysDefaults.AuthenticationScheme;
});
}
SSRS Звоните:
if (User.Identity is WindowsIdentity currentUser)
{
WindowsIdentity.RunImpersonated(currentUser.AccessToken, () =>
{
var reportServer = ReportServer();
var trustedUserHeader = new ReportService2010.TrustedUserHeader();
reportServer.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Identification;
var items = reportServer.ListChildrenAsync(trustedUserHeader, ReportFolder, true).Result;
});
}
Мы перепробовали все.Все имена участников-служб созданы правильно.У нас уже есть устаревший веб-сайт Silverlight, который работает нормально и работает на той же основе, что и проверка подлинности Windows, и подменяет пользователя на получение отчетов SSRS.
Просто чтобы проверить, связана ли проблема с тем, как сервисная структура создает службы, я создал автономноОсновной сайт DotNet, использующий собственный сервер HttpSys.Все та же проблема.
Я пытался найти в Интернете, но нет документации или какого-либо другого лица, которое сталкивалось с подобной проблемой.
HTTP-запрос не авторизован с помощью схемы аутентификации клиента 'Ntlm.Заголовок аутентификации, полученный от сервера, был 'NTLM'.