В моем веб-приложении, использующем Apache Shiro для AuthC и AuthZ, у меня есть две области аутентификации: один для обычного веб-интерфейса (называемый SsoRealm
) и еще один для API REST (называемый RestRealm
) с использованием маркера API. Принципы, прошедшие проверку подлинности с обеих сфер, имеют разрешения на дизъюнкцию (и AuthenticationTokens
). Если уже не существует существующего сеанса, и вызов API появляется через интерфейс REST, все будет в порядке, и аутентификация (и авторизация) происходит через RestRealm
. Однако, если есть существующий сеанс, предварительно прошедший аутентификацию через SsoRealm
, попытки аутентификации через RestRealm
не выполняются, и последовательная проверка авторизации (с использованием Subject.isPermitted
) терпит неудачу, поскольку субъект находится в неправильном состоянии.Shiro: принудительная аутентификация второго уровня, хотя существующий сеанс уже аутентифицирован через другую область
Соответствующие фильтры аутентификации зарегистрированы как (с помощью Shiro Guice):
addFilterChain("/api/x/*/y", REST_AUTH, NO_SESSION_CREATION);
addFilterChain("/**", SSO_AUTH);
Что я могу сделать, чтобы заставить повторную аутентификацию с «правильной» области?
бы обычай AuthenticationStrategy
помощь (то есть, делает AuthenticationStrategy
контракт позволит реализацию стратегии «если RestRealm
участвует, аутентификация RestRealm
должен быть успешным»)? AFAICS ModularRealmAuthenticator.doMultiRealmAuthentication
не вызывается снова, если есть существующая авторизованная сессия ...