Как обрабатывать недоступные метаданные ADFS - PullRequest
0 голосов
/ 27 февраля 2019

Для моего приложения ASP.NET MVC я использую аутентификацию ADFS.Он настроен следующим образом

            app.UseWsFederationAuthentication(
            new WsFederationAuthenticationOptions
            {
                MetadataAddress = ConfigurationManager.AppSettings.Get("MetadataAddress"),
                Wtrealm = ConfigurationManager.AppSettings.Get("Realm"),
            });

Из-за чего-то, что находится вне моего контроля, иногда метаданные в адресе метаданных недоступны.В подобных ситуациях я бы хотел перенаправить пользователей в пользовательское представление, а не в представление ошибок по умолчанию.Как можно это сделать?

1 Ответ

0 голосов
/ 27 февраля 2019

В итоге я создал промежуточное программное обеспечение Owin, которое фиксирует ошибку, генерируемую недействительными метаданными, которая выглядит следующим образом, и перенаправляет пользователя на маршрут, описывающий проблему:

public class LoggingMiddleware : OwinMiddleware
{
    public LoggingMiddleware(OwinMiddleware next)
        : base(next)
    {
    }

    public async override Task Invoke(IOwinContext context)
    {
        try
        {
            await Next.Invoke(context);
        } catch(Exception e)
        {
            Logger.Error($"Encountered error in authenticating {e.ToString()}");
            if(e.Source.Equals("Microsoft.IdentityModel.Protocols"))
            {
                context.Response.Redirect("/Home/OwinError");
            } else
            {
                throw e;
            }
        }
    }
}

Промежуточное программное обеспечение может быть просто добавлено в файл startup.cs со следующей строкой:

app.Use(typeof(LoggingMiddleware));
...