【问题标题】:Shiro and client certsShiro 和客户证书
【发布时间】:2017-11-29 14:34:36
【问题描述】:

对于我的 JSF/TomEE 应用程序,我有一个 NoSQL 数据库,其中包含用户和角色,用于指定用户如何以只读或写入方式访问资源(基本上是 url 参数中的 ID)。

我想实现安全性和this post gave me some ideas,但我热衷于尝试第 3 方库 - 可能是 Shiro 或 PicketLink。规则是用户将使用客户端证书进行身份验证,如果未提供,他们将作为默认访客用户进行身份验证。

令人惊讶的是,我很难在 Shiro 中找到一些有关如何执行此操作的信息,它看起来并不直截了当。 Shiro 中没有“开箱即用”的东西来实现客户端证书身份验证,这让我有点惊讶。

所以我想我必须创建一个领域来“连接” Shiro 和我的数据库。然后我读到我可能需要扩展 org.apache.shiro.authc.UsernamePasswordToken 来读取证书并将其传递给 Shiro。然后我想我必须限制对 JSF xhtml 页面中内容的访问(例如使用 rendered 属性),我想即使在 Named 托管 bean 的所有方法中我也需要检查权限。

另外,我不清楚在未提供证书时如何分配来宾用户,因为显然是 TomEE 验证了客户端,所以如果没有提供证书,我的代码将不会被执行分配来宾用户。我可以在 TomEE 中打开两个不同的端口,但是访问将不会统一,因为我想将访客用户与系统中的任何其他用户一视同仁。如何做到这一点?

这是否在 PicketLink 中以更简单的方式实现? (这也为 JSF 做好了准备)

【问题讨论】:

    标签: jsf-2 shiro tomee-7 picketlink


    【解决方案1】:

    好的,我花了一些时间和大量的研究,所以我将戏剧性地总结我的发现。我记录了所有内容,但不想创建书籍章节。

    所以我决定和 Shiro 一起去,我所描述的一切都有效并且可以完成。 This X509certificate project for Shiro 非常有用。基本上,您需要实现一个覆盖两种方法(一种用于身份验证,另一种用于授权)的领域——在我之前提到的代码中有一个类可以扩展。

    用户不提供证书的区分可以在 Shiro 过滤器中完成,因此当没有提供令牌(证书)时,可以动态创建或从密钥库中读取。

    为了限制 JSF 中的访问,有一些 shiro 标签可以提供帮助,无需使用rendered。我还在访问数据库的 bean 或其他类中检查了权限。一旦在授权方法中建立了权限,这将起作用。

    Tomcat 的问题可以通过使用<Connector port="..." ClientAuth="want" ... 来解决,它会要求提供证书,但如果没有提供证书,则不会阻止用户。

    【讨论】:

      猜你喜欢
      • 2010-10-16
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      • 2017-06-01
      • 2012-07-19
      相关资源
      最近更新 更多