Разрешить окна и базовую аутентификацию в основном веб-проекте asp.net

Я не уверен, что это правильный путь, но вот чего я пытаюсь достичь. У меня есть два разных типа методов действия контроллера. И мне нужно два разных метода аутентификации на каждом из них.

Например. 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?

mitchelsellers.com/blogs/2018/03/20/…
Ryan Wilson 18.07.2019 21:05

@RyanWilson Я уже прочитал эту статью. Я не могу понять, как мне сказать HttpRequest обойти аутентификацию Windows, проверить на основе базовой аутентификации, если она перенаправляется на ServiceController?

Shaggy 18.07.2019 21:13

Вы можете указать разные схемы аутентификации для разных контроллеров.

Vidmantas Blazevicius 18.07.2019 21:18

@Shaggy Это показывает, как использовать Jwt и Basic в одном проекте, это проект API, но он все равно должен показать вам, что вам нужно (stackoverflow.com/questions/49148648/…). Однако меня немного смущает ваша архитектура, если ваша служба содержит API, открытые для внешнего мира, как вы выразились, почему бы не сделать ее собственной автономной сущностью и не вызывать ее из веб-проекта?

Ryan Wilson 18.07.2019 21:18

Давайте просто предположим, что я хотел бы иметь проверку подлинности Windows на одном контроллере и обычную проверку подлинности на другом контроллере. Я обновил свой вопрос с требуемым кодом. Спасибо.

Shaggy 18.07.2019 21:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
5
1 100
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Мой код работал, просто нужно было добавить следующее в файл launchSettings.json

{
  "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": true
     }
}

вам не нужно ставить windowsAuthentication для базовой аутентификации

это должно выглядеть "iisSettings": { "Аутентификация окон": ложь, "anonymousAuthentication": правда, "iisExpress": { "applicationUrl": "http://localhost:xxxx", «ssl-порт»: ххххх } }

Другие вопросы по теме