Как обрабатывать разные ответы от сервера OIDC в ​​.NET Core?

В настоящее время я работаю над веб-приложением, которое использует промежуточное программное обеспечение.NET Core. Пользовательский интерфейс (приложение Angular) получает токен через неявный поток, который затем отправляет на уровень.NET Core mvc, который использует библиотеку OAuth2Introspection для внутреннего анализа токена (связывается с сервером PingFederate, которым мы управляем), и помещает утверждения в Пользователь в контексте http.

Это все работает нормально, но мы сталкиваемся с проблемой, когда иногда в новой среде уровень.NET неправильно конфигурируется с неверным идентификатором или секретным идентификатором клиента OAuth. Даже если пользовательский интерфейс настроен правильно, он возвращает ту же ошибку 401, которая вызывает перезагрузку пользовательского интерфейса в надежде избавиться от своего "плохого" токена. Однако токен не плохой, просто слой.NET не может проверить этот токен из-за наличия собственных неверных учетных данных.

Есть ли какой-нибудь элегантный способ справиться с этим? Я бы предпочел, чтобы мой уровень.NET возвращал ошибку 500 вместо 401, когда проблема на стороне.NET. Я знаю, что код состояния http, возвращаемый с сервера OIDC, отличается в этих ситуациях - при выполнении запроса на самоанализ плохой токен по-прежнему равен 200 (он просто помечен как активный: ложный), а идентификатор / секретный идентификатор клиента - 401 с этой стороны (независимо от того, хорош ли сам токен). Я хочу, чтобы.NET-код мог реагировать на это и вести себя по-другому, вместо того, чтобы всегда возвращать 401 при любой проблеме связи OIDC. Я ожидал бы, что это будет ловушка в моей конфигурации сервиса, но это все отчасти запутано библиотечным кодом, и я не уверен, где лучшее место для этого могло бы быть.

РЕДАКТИРОВАТЬ: Проще говоря: мне нужно возвращать разные коды состояния HTTP в зависимости от того, как моя аутентификация не удалась. Есть ли способ сделать это?

0 ответов

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