Ситуация:
Окружающая среда: 1 сервер: Oracle Linux Микроинтегратор 4.1.0 работает API-менеджер 4.1.0 работает Доступ к сайтам администратора, издателя, DevPortal можно получить как на сервере, так и в локальной сети. Доступ к API, который я создал с помощью oauth2 (авторизация + токен), можно получить в локальной сети (через Postman).
СЕЙЧАС... Я хочу открыть этот API в Интернете. Моя ИТ-команда добавила следующее в файл конфигурации сервера DMZ (NGINX), где oauth2 должен вызывать службы аутентификации, а dsFenicio — это API.
location /oauth2 {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass https://192.168.135.64:9443;
proxy_read_timeout 300;
proxy_ssl_server_name on;
proxy_ssl_session_reuse off;
proxy_ssl_verify off;
}
location /dsFenicio {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass https://192.168.135.64:8243;
proxy_read_timeout 300;
proxy_ssl_server_name on;
proxy_ssl_session_reuse off;
proxy_ssl_verify off;
}
Проблема: Когда я отправил запрос кода авторизации oauth2 (от почтальона), я получил сообщение в браузере, в котором говорилось: «Обнаружены подозрительные попытки аутентификации В процессе аутентификации обнаружены подозрительные попытки входа в систему. Пожалуйста, попробуйте войти снова"
а это в логах (wso2carbon.log):
ОШИБКА {org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultRequestCoordinator} — исключение в Authentication Framework org.ws$wso2.carbon.identity.application.authentication.framework.exception.FrameworkException: Session одноразовое значение cookie не соответствует сеансу с sessionDataKey: bf74d0ec-05ef-4682-...
Это связано с функцией под названием Session Nonce Cookie Validation, которая включена по умолчанию.
Я смог воспроизвести этот сценарий и смог решить эту ситуацию, оставив включенной проверку одноразовых файлов cookie сеанса. Были выполнены следующие шаги.
/commonauth
, /authenticationendpoint
, /logincontext
через nginx в дополнение к конечной точке /oauth2
.deployment.toml
[authentication.endpoints]
login_url = "https://<loadbalancer_hostname>/authenticationendpoint/login.do"
retry_url = "https://<loadbalancer_hostname>/authenticationendpoint/retry.do"
Без вышеуказанных шагов вы можете отключить эту функцию также для работы вашего сценария. Эту функцию можно отключить, добавив следующее в файл deployment.toml
.
[session.nonce.cookie]
enabled = "false"