【问题标题】:Can CLIENT-CERT auth-method be used with a JDBC realm within tomcat?CLIENT-CERT auth-method 可以与 tomcat 中的 JDBC 领域一起使用吗?
【发布时间】:2010-09-14 20:31:24
【问题描述】:

JDBC 领域为身份验证指定了一个表结构,其中包含由属性 userNameCol 和 userCredCol 定义的列。这些对应于对 FORM 或 BASIC 身份验证方法有意义的用户和密码。它们是交互式的,需要客户端用户提供这两部分。

  • 返回的内容 证书?
  • 什么数据的例子 存储在 userNameCol 和 userCredCol 长什么样子?
  • 是否有替代表 这个领域的结构 案例?

PS - 我使用的是 tomcat 5.5.x。

【问题讨论】:

  • 奇怪,我的帖子已成为“社区维基”的财产。哦,好吧,我还是想得到一个答案。
  • 是的,经过5次编辑,它被国有化了。 ¡革命万岁!

标签: java web-services authentication tomcat authorization


【解决方案1】:

JDBCRealm 支持 CLIENT-CERT

是的,可以。但是,有一些怪癖需要注意。

用户名

用户名列应包含证书主体的专有名称,作为字符串。不幸的是,Tomcat 用于获取此字符串的方法会产生依赖于实现的结果,因此如果您要切换到新的安全提供程序,甚至只是升级您的 Java 运行时,您可能需要将您的用户名映射到新表单.您必须测试您的部署以找出使用的格式。

具体是在X509Certificate.getSubjectDN()返回的Principal上调用getName(),得到一个String,作为用户名。如果您阅读documentation,,您会发现这不再是最好的方法。

认证

最简单的设置是将您的信任锚加载到Tomcat's trust store,它在“server.xml”文件中配置。使用此设置,位于您的受信任 CA 中的任何客户端证书链都将被视为“经过身份验证”,这是正确的 - 身份验证意味着身份是已知的,并且与授权不同,授权决定了允许该身份的内容做。

授权

由于任何拥有签名证书的人都将通过身份验证,因此您需要设置角色以保护应用程序中的私有资源。这是通过在“web.xml”文件中设置与角色相关联的安全约束来完成的。然后,在您的数据库中,填充“角色”表以授予受信任用户额外的角色。

用户表和角色表之间的关系与基于 FORM 的授权完全一样,应该用于向您信任的用户授予适当的权限。

关于密码的说明

JDBCRealm 将创建一个新的 Principal,它确实带有密码,但除非您的应用程序将此 Principal 向下转换为 Tomcat 特定的实现 (GenericPrincipal),否则此属性将不可见你,你在那一栏中放什么并不重要。我推荐NULL。

换句话说,当将JDBCRealm 与客户端身份验证一起使用时,密码字段将被忽略。这个GenericPrincipal 有一个访问底层主体的方法,但不幸的是,证书中的Principal 没有传递; JDBCRealm 将其设置为空;在这种情况下,唯一有用的方法可能是 getName()(返回主题 DN 可能是一些非标准形式)。

表格结构和内容

使用与FORM-based JDBCRealm(或DatasourceRealm)完全相同的表结构。唯一的区别在于内容。用户名将是主题可分辨名称的文本表示,密码将是 NULL 或一些虚拟值。

【讨论】:

    猜你喜欢
    • 2012-11-23
    • 1970-01-01
    • 2013-06-08
    • 2015-08-27
    • 2016-01-26
    • 2013-03-14
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多