Ядро ASP.Net 2: схема аутентификации по умолчанию игнорируетсяC#

Место общения программистов C#
Ответить
Anonymous
 Ядро ASP.Net 2: схема аутентификации по умолчанию игнорируется

Сообщение Anonymous »

Я пытаюсь создать собственный AuthenticationHandler в ASP.Net Core 2. Продолжая такие темы, как промежуточное программное обеспечение аутентификации ASP.NET Core 2.0 и почему схема аутентификации Asp.Net Core является обязательной, я создал определенные классы. Регистрация происходит так:

Код: Выделить всё

services.AddAuthentication(
options =>
{
options.DefaultScheme = Constants.NoOpSchema;
options.DefaultAuthenticateScheme = Constants.NoOpSchema;
options.DefaultChallengeScheme = Constants.NoOpSchema;
options.DefaultSignInScheme = Constants.NoOpSchema;
options.DefaultSignOutScheme = Constants.NoOpSchema;
options.DefaultForbidScheme = Constants.NoOpSchema;
}
).AddScheme(Constants.NoOpSchema, "Custom Auth", o => { });
Все работает, если конкретные контроллеры явно задают схему:

Код: Выделить всё

[Authorize(AuthenticationSchemes= Constants.NoOpSchema)]
[Route("api/[controller]")]
public class IndividualsController : Controller
Но мне бы не хотелось задавать схему, поскольку она должна добавляться динамически. Как только я удалю свойство Scheme, вот так:

Код: Выделить всё

[Authorize]
[Route("api/[controller]")]
public class IndividualsController : Controller
Это больше не работает.

Я надеялся, что установка свойств DefaultScheme сделает эту работу . Достаточно интересно, я не нашел какого-либо конкретного обсуждения на эту тему.
Я делаю здесь что-то не так или мой ожидаемый результат неправильный?

Редактировать: Спасибо по вопросам, это мне очень помогло. Похоже, что сопоставление DefaultScheme используется промежуточным программным обеспечением аутентификации, которое я использовал только тогда, когда CustomAuthHandler не было на месте. Поэтому мне приходилось всегда добавлять AuthenticationMiddleware.

Edit2: К сожалению, оно все еще не работает. Чтобы немного улучшить мой вопрос: я добавляю промежуточное программное обеспечение, как обычно:

Код: Выделить всё

app.UseAuthentication();
app.UseMvc();
Теперь я попадаю в свой обработчик, который выглядит следующим образом:

Код: Выделить всё

public class NoOpAuthHandler : AuthenticationHandler
{
public const string NoOpSchema = "NoOp";

public NoOpAuthHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock)
{
}

protected override Task HandleAuthenticateAsync() => Task.FromResult(AuthenticateResult.Success(new AuthenticationTicket(Context.User, NoOpSchema)));
}
Но даже если я всегда возвращаю успех, я получаю 401. Я думаю, мне нужно копнуть глубже и как-то установить некоторые претензии, но, к сожалению, обработчики от Microsoft довольно их сложно анализировать, поскольку они содержат много кода.

Подробнее здесь: https://stackoverflow.com/questions/499 ... me-ignored
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»