我已经创建了自己的 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 目前正在探索如何最好地解决这个问题的原因。
您基本上同时拥有三个“解决方案”:
- 只需定义两次数据库连接详细信息,一次在服务器级别,一次在应用程序级别。看起来您确实已经这样做了。
- 使用 JASPIC,它是一个提供身份验证 API 的容器,可以选择让应用程序包含身份验证模块。它可以使用完全相同的数据源和可能的 JPA 实体管理器,以便应用程序也在使用。
- 使用外部安全框架确保安全,例如DeltaSpike Security 或 Shiro,完全在“用户空间”中实现。
从 Java EE 的角度来看,没有一个是真正理想的。第一个有重复的定义,确实有点违反了原则,第二个本身还可以,但 JASPIC 的水平有点低,第二个是一个丰富的解决方案,但与现有的 Java EE 安全性没有很好地集成。
关于java - JASPIC JDBC 领域身份验证的 "register new user"解决方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29837232/