【发布时间】:2012-06-11 23:24:01
【问题描述】:
在使用 Apache Shiro 进行 AuthC 和 AuthZ 的 Web 应用程序中,我有两个身份验证领域:一个用于常规 Web 界面(称为 SsoRealm),另一个用于使用 API 令牌的 REST API(称为 RestRealm) .由两个领域认证的主体具有分离权限(和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 身份验证需要成功”的策略)?如果存在现有的经过身份验证的会话,则不会再次调用 AFAICS ModularRealmAuthenticator.doMultiRealmAuthentication...
【问题讨论】: