Как AuthenticationMiddleware обрабатывает несколько схемC#

Место общения программистов C#
Ответить
Anonymous
 Как AuthenticationMiddleware обрабатывает несколько схем

Сообщение Anonymous »

Мы знаем, что можем использовать несколько схем для аутентификации пользователей, таких как < /p>

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

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme,
options => builder.Configuration.Bind("JwtSettings", options))
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
options => builder.Configuration.Bind("CookieSettings", options));
Но в соответствии с AuthenticationMiddleware код:
https://source.dot.net/#microsoft.aspne ... ode]public async Task Invoke(HttpContext context)
{
// ...
var handlers = context.RequestServices.GetRequiredService();
foreach (var scheme in await Schemes.GetRequestHandlerSchemesAsync())
{
var handler = await handlers.GetHandlerAsync(context, scheme.Name) as IAuthenticationRequestHandler;
if (handler != null && await handler.HandleRequestAsync())
{
return;
}
}

var defaultAuthenticate = await Schemes.GetDefaultAuthenticateSchemeAsync();
if (defaultAuthenticate != null)
{
var result = await context.AuthenticateAsync(defaultAuthenticate.Name);
// ...
}

await _next(context);
}
[/code]
Foreach , кажется, применяет схемы Mulitple в первую очередь. Тем не менее, он использует iauthenticationRequestHandler Not IauthenticationHandler .
Поэтому, когда мы называем AddCookie метод расширения, мы добавляем схему типа обработки, чтобы быть CookieAuthenticationHandler (https://source.dot.net/#microsoft.aspne ... ions.cs,81)
и цепочка реализации интерфейса:

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

public class CookieAuthenticationHandler : SignInAuthenticationHandler

public abstract class SignInAuthenticationHandler : SignOutAuthenticationHandler, IAuthenticationSignInHandler

// ...
< /code>
SignInAuthenticationHandler
не реализует iauthenticationRequestHandler , если мы прослеживаем все возможное, так как же AuthenticationMiddleware обрабатывает несколько схем и вызывает несколько обработчиков? Насколько я вижу, применяется только схема по умолчанию?

Подробнее здесь: https://stackoverflow.com/questions/774 ... le-schemes
Ответить

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

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

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

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

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