【问题标题】:Shiro: Forcing second realm authentication even though existing session is already authenticated via other realmShiro:即使现有会话已经通过其他领域进行了身份验证,也强制进行第二领域身份验证
【发布时间】: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...

【问题讨论】:

    标签: java guice shiro


    【解决方案1】:

    事实证明,这个问题相当容易解决:只需覆盖 AuthenticatingFilter#isAccessAllowed 以确保“正确”主体类型已针对您的领域进行身份验证(默认实现仅使用 Subject#isAuthenticated 来测试是否有任何主体已通过身份验证 - 无论它是否适合领域)。

    【讨论】:

      猜你喜欢
      • 2016-04-08
      • 2016-04-01
      • 2015-02-10
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多