Переключение метода аутентификации веб-API ASP.NET Core между JWT и оконной аутентификациейC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Переключение метода аутентификации веб-API ASP.NET Core между JWT и оконной аутентификацией

Сообщение Anonymous »

Я создаю приложение, которое использует JWT для аутентификации, мне нужно добавить аутентификацию Windows в качестве другого метода, чтобы переключаться между ними по мере необходимости клиента.
Я создал промежуточное программное обеспечение для этого эта работа, вероятно, сработала во время разработки. однако, когда я публикую выпуск и развертываю его в IIS, я получаю следующую ошибку

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

The Negotiate Authentication handler cannot be used on a server that directly supports Windows Authentication. Enable Windows Authentication for the server and the Negotiate Authentication handler will defer to it.
это код аутентификации JWT. Примечание. Все настроено для работы с JWT Auth.

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

// Dependency Injection.cs
string? authScheme = configuration["AuthenticationScheme"];
if (authScheme) {
JwtTokenConfig? jwtTokenConfig = configuration.GetSection("jwtTokenConfig").Get();
services.AddSingleton(jwtTokenConfig);
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(x =>
{
// options
}).AddNegotiate();

// JWT Authentication (Anonymous)
services.AddScoped();
services.AddHostedService(sp => new JwtRefreshTokenCache(new JwtAuthManager(jwtTokenConfig)));
// Add CORS services
services.AddCors(options =>
{options.AddPolicy("AllowSpecificOrigin",
builder => builder.WithOrigins("http://localhost:4200")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials());
});
}
}
это код промежуточного программного обеспечения

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

    public class AuthMiddleware
{
private readonly RequestDelegate _next;
private readonly IConfiguration _configuration;
public AuthMiddleware(RequestDelegate next, IConfiguration configuration)
{
_next = next;
_configuration = configuration;
}

public async Task InvokeAsync(HttpContext context)
{
var authScheme = _configuration["AuthenticationScheme"];
var publicRoutes = new List
{ "/",
"/api/v1",
"/api/v1/Account/Login" };
if (publicRoutes.Any(route => context.Request.Path.StartsWithSegments(route, StringComparison.OrdinalIgnoreCase)))
{ await _next(context); return; }
AuthenticateResult result = null;
if (authScheme == "Windows") { result = await context.AuthenticateAsync(NegotiateDefaults.AuthenticationScheme); }
else if (authScheme == "JwtBearer")
{ result = await context.AuthenticateAsync(JwtBearerDefaults.AuthenticationScheme); }
if (result != null && result.Succeeded)
{ context.User = result.Principal; await _next(context); }
else { await context.ChallengeAsync(); }
}
}
Базовый контроллер унаследует метод аутентификации для остальных контроллеров.

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

    // [Authorize(AuthenticationSchemes = IISDefaults.AuthenticationScheme)]
[Authorize]
public class BaseController : Controller
Program.cs

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

app.UseAuthentication();
app.UseMiddleware();
app.UseAuthorization();
Я пытался изменить настройки IIS, идентификатор пула приложений, изменить поставщиков проверки подлинности Windows.

Я пытался реализовать это без Negotiate.если я отключу проверку подлинности Windows в IIS, Интернет полностью остановится с ошибкой 404, если я включу проверку подлинности Windows, мне будет предложено войти в систему через нее, и даже если я это сделаю, ничего не произойдет.
приложение полностью выключено, ни одна страница не отображается, даже страница входа в систему, потому что ошибка в program.cs, поэтому вообще ничего не работает.

Подробнее здесь: https://stackoverflow.com/questions/786 ... -authentic
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Переключение метода аутентификации веб-API ASP.NET Core между JWT и оконной аутентификацией
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Ошибка Bad Gateway (502) при вызове API Core Core .NET .NET из другого API Core .NET .NET .NET .NET
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Ошибка Bad Gateway (502) при вызове API Core Core .NET .NET из другого API Core .NET .NET .NET .NET
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как интегрировать вход в Google с аутентификацией JWT в ASP.NET Core?
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как интегрировать вход в Google с аутентификацией JWT в ASP.NET Core?
    Anonymous » » в форуме C#
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

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