在使用 Apache Shiro 进行 AuthC 和 AuthZ 的 Web 应用程序中,我有两个身份验证领域:一个用于常规 Web 界面(称为SsoRealm
),另一个用于RestRealm
使用 API 令牌的 REST API(称为 )。由两个领域认证的主体具有分离权限(和AuthenticationTokens
)。如果没有预先存在的会话并且 API 调用通过 REST 接口到达,那么一切都很好,并且身份验证(和授权)通过RestRealm
. 但是,如果有一个现有会话先前通过发生的
SsoRealm
无身份验证尝试进行身份验证RestRealm
,并且连续授权检查(使用Subject.isPermitted
)失败,因为主题来自错误的领域。
相应的身份验证过滤器注册为(使用 Shiro Guice):
addFilterChain("/api/x/*/y", REST_AUTH, NO_SESSION_CREATION);
addFilterChain("/**", SSO_AUTH);
我能做些什么来强制使用“正确”领域重新进行身份验证吗?
自定义AuthenticationStrategy
帮助(即,AuthenticationStrategy
合同是否允许实施“如果RestRealm
涉及,则RestRealm
身份验证需要成功”的策略)?ModularRealmAuthenticator.doMultiRealmAuthentication
如果存在现有的经过身份验证的会话,则不会再次调用AFAICS ...