Задайте вызов в промежуточном программном обеспечении Owin

Реализации промежуточного программного обеспечения Owin ищут свой тип аутентификации перед добавлением запроса, поэтому отвечает только соответствующее промежуточное программное обеспечение. Несколько вызовов могут быть использованы одновременно.

protected override Task ApplyResponseChallengeAsync()
{
    if (Response.StatusCode == 401)
    {
        var challenge = Helper.LookupChallenge(Options.AuthenticationType, Options.AuthenticationMode);

        if (challenge != null)
        {
            Response.Headers.AppendValues("WWW-Authenticate", _challenge);
        }
    }

    return Task.FromResult<object>(null);
}

При использовании встроенного промежуточного программного обеспечения Cookie или Bearer тип "Bearer" всегда присутствует и просматривается.

Где бы я добавил свой собственный тип вызова в глобальном масштабе, чтобы он был найден? Это можно сделать вручную в контексте запроса, вызвав

Request.GetOwinContext().Authentication.Challenge("Basic");

но я хотел бы добавить глобальную конфигурацию для всех контроллеров.

1 ответ

Вы можете установить AuthenticationResponseChallenge с помощью AuthenticationManager.Challenge() методы. Например, в вашем файле startup.cs вы можете context.Authentication.Challenge(new AuthenticationProperties(), Options.AuthenticationType), так что промежуточное ПО, которое соответствует Options.AuthenticationType, возвращает эту проблему при поиске.

Активное промежуточное ПО будет пытаться справиться со всеми исходящими проблемами независимо от его AuthenticationType. Обычно активным является только промежуточное программное обеспечение cookie, а все остальное промежуточное ПО пассивно. Чтобы пассивное промежуточное программное обеспечение могло справиться с вызовом, вызов должен иметь соответствующий тип AuthenticationType.

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