Сценарий: У нас есть веб-приложение ASP.NET Core, а также служба ASP.NET Core Web.API.Они размещены на одном сервере (Windows 2016) и в одном домене, хотя и на разных веб-сайтах (у нас есть один для служб, а другой для приложений).Это приложение типа интрасети, и мы хотели бы иметь возможность передавать учетные данные Windows от пользователя клиента приложению, а также в рамках вызовов API.
Я включил проверку подлинности Windows для приложенияа также сервис в IIS.В настоящее время я не могу получить 401.1 при вызове конечной точки web.api через код приложения.Я могу просмотреть приложение, а также API в веб-браузере.
Код API:
В Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseMvc();
}
In ValuesController.cs
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
return new string[] {"value1", "value2" };
}
}
Код приложения:
В Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
Вызов функции с использованием RestSharp(хотя HttpWebRequest также выдает 401)
private string GetRestResponse(string endpoint)
{
var client = new RestClient(endpoint);
var request = new RestRequest(Method.GET);
request.UseDefaultCredentials = true;
request.AddHeader("content-type", "application/json");
IRestResponse response = client.Execute(request);
return response.Content;
}