Я не уверен, что это правильный путь, но вот чего я пытаюсь достичь. У меня есть два разных типа методов действия контроллера. И мне нужно два разных метода аутентификации на каждом из них.
Например. HomeКонтроллер
[Authorize(AuthenticationSchemes = "Windows")]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}
Сервисконтроллер
[Authorize(AuthenticationSchemes = "BasicAuthentication")]
[Route("api/my-service")]
[ApiController]
public class ServiceController : ControllerBase
{
[Route("Evaluate")]
[HttpPost]
public EvaluateResponse Evaluate([FromBody]EvaluateRequest request)
{
//return something;
}
}
Startup.cs (Конфигуресервисс)
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddAuthentication("BasicAuthentication")
.AddScheme<AuthenticationSchemeOptions, BasicAuthenticationHandler>("BasicAuthentication", null);
Startup.cs (Настройка)
app.UseAuthentication();
Код для базовой аутентификации реализован как упомянутый здесь.
Теперь, если я пытаюсь вызвать api/my-service/Evaluate, он все еще вызывает проверку подлинности Windows.
Как я могу реализовать два разных метода аутентификации, один для HomeController, а другой для ServiceController?
@RyanWilson Я уже прочитал эту статью. Я не могу понять, как мне сказать HttpRequest обойти аутентификацию Windows, проверить на основе базовой аутентификации, если она перенаправляется на ServiceController?
Вы можете указать разные схемы аутентификации для разных контроллеров.
@Shaggy Это показывает, как использовать Jwt и Basic в одном проекте, это проект API, но он все равно должен показать вам, что вам нужно (stackoverflow.com/questions/49148648/…). Однако меня немного смущает ваша архитектура, если ваша служба содержит API, открытые для внешнего мира, как вы выразились, почему бы не сделать ее собственной автономной сущностью и не вызывать ее из веб-проекта?
Давайте просто предположим, что я хотел бы иметь проверку подлинности Windows на одном контроллере и обычную проверку подлинности на другом контроллере. Я обновил свой вопрос с требуемым кодом. Спасибо.





Мой код работал, просто нужно было добавить следующее в файл launchSettings.json
{
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": true
}
}
вам не нужно ставить windowsAuthentication для базовой аутентификации
это должно выглядеть "iisSettings": { "Аутентификация окон": ложь, "anonymousAuthentication": правда, "iisExpress": { "applicationUrl": "http://localhost:xxxx", «ssl-порт»: ххххх } }