В моей организации уже есть некоторые веб-приложения, развернутые на сервере liberty, использующие его систему единого входа, которая устанавливает файл cookie LtpaToken для всего домена интрасети.
Теперь мы переходим на веб-приложения с аутентификацией openidconnect, защищенные без сеанса (с JWT).
Аутентификация работает нормально - задействован только браузер - и авторизация также работает нормально (с функцией mpJwt-1.1).
Но когда пользователь переходит из другого веб-приложения (в рамках того же сеанса), браузер отправляет LtpaToken2 cookie, а liberty отклоняет запрос с 401 (неавторизованный).
Я бы хотел:
- полностью игнорировать, какой бы файл cookie LtpaToken ни пришел в запрос (да, полностью игнорировать, как будто его никогда не было, действительного или недействительного, с истекшим сроком действия или что-то еще, наши новые приложения никогда не будут заботиться о старая схема SSO);
- никогда не генерируйте LtpaToken после первого запроса с действующим токеном JWT.
ИЗМЕНИТЬ
Второй пункт выше на самом деле не происходит (чтобы было ясно, этот новый сервер liberty не генерирует LtpaToken).
Мне удалось создать MWE, состоящий из (на самом деле настолько минимального, что только нужен server.xml и любой index.html):
(server.xml)
<server>
<featureManager>
<feature>servlet-3.1</feature>
<feature>mpJwt-1.1</feature>
</featureManager>
<applicationManager autoExpand="true" />
<webApplication location="mysample.war" contextRoot="/" />
<httpEndpoint host="*" httpPort="9080" id="defaultHttpEndpoint"/>
<mpJwt id="server.xml-<mpJwt/>"
issuer="sso-issuer"
keyName="sso-jwk"
/>
</server>
(index.html)
any content will do
Я мог бы положительно воспроизвести 1-ю точку (отклонение с 401) с помощью простого заголовка Cookie: LtpaToken2 (да, событие не требует значения):
$ curl -v http://localhost:9080/index.html -H 'Cookie: LtpaToken2'
Это действительно возвращает index.html
файл, но со статусом HTTP 401. Для html это нормально. Для файлов javascript это не так (браузер отказывается запускать скрипты).
Заголовки ответа:
HTTP/1.1 401 Unauthorized
X-Powered-By: Servlet/3.1
WWW-Authenticate: Bearer realm="MP-JWT", error="invalid_token"
Date: Wed, 01 Jul 2020 22:18:52 GMT
Content-Type: text/html
Last-Modified: Wed, 01 Jul 2020 21:51:32 GMT
Content-Length: 11
Content-Language: en-US
При запуске сервер сообщает:
...
[AUDIT ] CWWKS4104A: LTPA keys created in 1.716 seconds. LTPA key file: .../target/liberty/wlp/usr/servers/mysample/resources/security/ltpa.keys
...
[AUDIT ] CWWKF0012I: The server installed the following features: [appSecurity-2.0, cdi-1.2, distributedMap-1.0, jndi-1.0, jsonp-1.0, jwt-1.0, mpConfig-1.3, mpJwt-1.1, servlet-3.1, ssl-1.0].`
...
Измените заголовок запроса Cookie на что-нибудь, кроме LtpaToken2, и результат будет тот же index.html, но со статусом 200 вместо этого.
<openidConnectClient...>
. Просто<mpJwt...>
. - person rslemos   schedule 28.06.2020