java - JASPIC JDBC 领域身份验证的 "register new user"解决方案是什么?

标签 java authentication jakarta-ee jdbc jaspic

我已经创建了自己的 JDBC 领域(使用 WildFly 8.2),如第 50.3 段所述。 JavaEE 7 教程的一部分。我的理解是,JDBC 领域身份验证意味着服务器读取和检查用户凭据,应用程序甚至不知道身份验证保留的数据库的坐标。

对于“新用户注册”,我唯一能想象的是从我的应用程序内部实现一个经典的解决方案:访问身份验证数据库,检查所选用户名是否已经存在,在表中插入行.. .但这是否违反了“容器管理身份验证”的整个范式,并且可能插入安全漏洞?

是否有一些我忽略的服务器实现的机制?

最佳答案

but doesn't this violates the whole paradigm of "container managed authentication", and maybe insert security holes?

是的,或多或少。容器管理的安全概念,其中应用程序完全不知道身份验证机制和身份存储(用户数据实际存储的位置)并没有真正考虑应用程序有自己的用户注册的用例/注册功能。

这个想法似乎更倾向于将外部获得的应用程序(例如 Sonar 或 JIRA 实例)集成到现有的企业结构中。管理员使用 LDAP 等中央系统创建用户,在某些情况下甚至使用应用程序服务器的管理 UI。

不幸的是,许多典型的公共(public) Web 应用程序并不属于这种类型。它们是独立的应用程序(不与现有的内部企业基础设施集成),并且有效地管理自己的用户。

经典概念在那里不合适,这就是 Java EE 安全 EG 目前正在探索如何最好地解决这个问题的原因。

您基本上同时拥有三个“解决方案”:

  1. 只需定义两次数据库连接详细信息,一次在服务器级别,一次在应用程序级别。看起来您确实已经这样做了。
  2. 使用 JASPIC,它是一个提供身份验证 API 的容器,可以选择让应用程序包含身份验证模块。它可以使用完全相同的数据源和可能的 JPA 实体管理器,以便应用程序也在使用。
  3. 使用外部安全框架确保安全,例如DeltaSpike Security 或 Shiro,完全在“用户空间”中实现。

从 Java EE 的角度来看,没有一个是真正理想的。第一个有重复的定义,确实有点违反了原则,第二个本身还可以,但 JASPIC 的水平有点低,第二个是一个丰富的解决方案,但与现有的 Java EE 安全性没有很好地集成。

关于java - JASPIC JDBC 领域身份验证的 "register new user"解决方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29837232/

相关文章:

java - 如何配置gradle在不同的环境中使用不同的log4j.properties文件?

Java集合二分查找: The method binarySearch in the type Collections is not applicable for the arguments

javascript - Passport 的注销功能会删除 cookie 吗?如果没有,它是如何工作的?

java - 如何审计 Java EE 项目?

java - NetBeans "final method is declared in class with normal scope"

java - 如何防止Hibernate Envers创建审计表?

设置路径后仍无法识别javac

reactjs - 用柏树在窗口上设置一个属性

authentication - 是否可以将 Apache 基本身份验证设置为锁定目录(一个文件除外)?

java - 如何正确执行以日期为条件的 JdbcQuery?