Создано 2 веб-API с использованием .Net Core 2.0 и размещено внутри IIS под аутентификацией Windows (анонимный доступ отключен) на одном сервере.Оба API-интерфейса работают с одной и той же учетной записью службы с соответствующими разрешениями / ролегруппами в Active Directory.Тем не менее, получить 401 несанкционированную ошибку при использовании одного API от другого.Использование HTTPClient для выполнения вызовов API.Обратите внимание, что он работает при доступе ко 2-й конечной точке API напрямую через браузер, но не из другого API.
Украшено фильтром Authorize в контроллере
[Authorize(Policy = "ValidRoleGroup")]
Запустите код в ConfigureServices в обеих службах APIкак показано ниже.
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddAuthorization(options =>
{
options.AddPolicy("ValidRoleGroup", policy => policy.RequireRole(Configuration["SecuritySettings:ValidRoleGroup"]));
});
services.AddMvc(configure =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
configure.Filters.Add(new AuthorizeFilter(policy));
});
services.Configure<IISOptions>(options =>
{
options.AutomaticAuthentication = true;
options.ForwardClientCertificate = true;
});
services.AddMvc();
services.AddScoped<HttpClient>(c => new HttpClient(new HttpClientHandler()
{
UseDefaultCredentials = true,
PreAuthenticate = true,
ClientCertificateOptions = ClientCertificateOption.Automatic,
}));
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});