Учетные данные сертификата клиента OAuth2 и проблема OIDC

Моя компания использует сервер PingFederate для реализации A&A токена Oauth2, а также мы используем аутентификацию на основе сертификата PKI, для которой настроен сервер.

У нас есть веб-API Java Spring Boot Reactive, настроенный для аутентификации с помощью токенов Oauth2. Он реализует поток кода авторизации.

Так вот в чем проблема.

Когда API выполняет вызов сервера Oauth2 для получения кода авторизации, запрос выполняется с использованием сертификата клиента, настроенного для API, а не сертификата пользователя, совершающего вызов. Код возвращается, и я могу использовать его для получения токена доступа и токена удостоверения.

Проблема в том, что токен идентификации содержит утверждения о клиентском приложении, а не о пользователе.

Есть ли способ настроить реактивный API для передачи сертификата пользователя, а не сертификата API?

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
92
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обычно поток кода авторизации с использованием клиентских сертификатов для аутентификации работает следующим образом:

ЗАПРОС ПЕРЕДНЕГО КАНАЛА

Этот запрос обычно не использует клиентские сертификаты или API. Вместо этого клиент отправляет запрос авторизации в системный браузер, и пользователь каким-либо способом проходит аутентификацию, чтобы идентифицировать себя.

В результате рассчитывается предмет претензии. Субъект сохраняется сервером авторизации, который возвращает код авторизации в ответе на авторизацию.

ЗАПРОС ОБРАТНОГО КАНАЛА

Затем клиент отправляет код авторизации в запросе токена на конечную точку токена сервера авторизации. Канал mTLS можно использовать для подтверждения права собственности на сертификат клиента. Приложение на основе браузера обычно делает это через серверный компонент, который предоставляет сертификат клиента.

Выданные затем токены содержат субъектное утверждение пользователя, даже если серверный компонент предоставил сертификат клиента.

ВАШ ВОПРОС

Из вашего вопроса несколько вещей кажутся немного нестандартными. Может быть, вы могли бы улучшить свой вопрос?

  • Какой метод используется для аутентификации пользователя? Например, используете ли вы пароли, ключи доступа, собственный метод аутентификации и т. д.? Метод аутентификации — это то, что вычисляет субъект в токенах.

  • Используете ли вы сертификаты клиента для аутентификации клиента в конечной точке токена или для аутентификации пользователя каким-либо образом в конечной точке авторизации? Если последнее, то большая часть моего ответа потребует обновления.

  • Вы пытаетесь выполнить двойной переход клиентских сертификатов от клиента к вашему API и к серверу авторизации? Если так, то это не сработает.

  • Почему ваш API инициирует поток кода? Это бэкэнд для фронтенда? Как работает запрос фронтального канала? Например. API перенаправляет браузер?

ПРЕДОСТАВЛЕНИЕ СЕРТИФИКАТОВ УРОВНЯ ПОЛЬЗОВАТЕЛЯ

Если вам необходимо развернуть сертификаты клиента на уровне пользователя, ваш API не обеспечивает значительной роли безопасности для внешнего интерфейса. Вместо этого есть несколько вариантов решения, которые вы можете рассмотреть.

ПРЯМОЙ ВЗАИМНЫЙ TLS

Приложение на основе браузера может напрямую вызывать конечную точку токена сервера авторизации с сертификатом клиента. Если сервер авторизации размещен за шлюзом API, вам необходимо настроить шлюз на использование сквозной передачи TLS.

ВЗАИМНЫЙ TLS ПРЕКРАЩЕН НА ПРОКСИ

Если сервер авторизации размещен за шлюзом API, шлюз может проверить сертификат, отправленный приложением на основе браузера, а затем вызвать сервер авторизации. Затем вам необходимо убедиться, что злоумышленник не сможет получить доступ в обход шлюза.

Гэри Арчер, это во многом соответствует тому, что мы пытаемся сделать, но включает сертификаты уровня пользователя для аутентификации. Токен идентификатора имеет утверждение субъекта, но оно зависит от переданного сертификата. Если я настрою API для использования сертификата уровня пользователя, утверждение субъекта действительно представляет пользователя. Если я настрою API для использования сертификата клиентского приложения, он будет представлять приложение, а это не то, что мне нужно.

crixus 05.06.2024 16:32

Что ж, я обновил свой ответ, но ваш сценарий непрост, поэтому вам сложно дать точный ответ. Посмотрите, помогут ли мои комментарии.

Gary Archer 06.06.2024 15:08

Гэри Арчер, Спасибо за предоставленную информацию. Я начну рассматривать вариант mTLS более подробно.

crixus 07.06.2024 15:37

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