gpt4 book ai didi

spring-security - 了解 Java 应用程序服务器中的身份验证

转载 作者:行者123 更新时间:2023-12-03 22:31:54 25 4
gpt4 key购买 nike

我目前正在开发一个在 JBoss AS 7 上运行的项目,该项目需要来自各种来源的身份验证。我试图了解结合起来提供身份验证的各种组件。

我对这一切如何组合在一起有一些假设/猜测,但我需要确保我的理解是正确的。所以下面是我理解的 JBoss AS7 的身份验证过程。

您有一个安全领域,它定义了如何对用户进行身份验证。然后将此领域暴露给您的应用程序,以保护其中的部分或全部。在 AS7 中,这是在 元素中配置的。

可以将领域配置为使用登录模块(例如数据库、LDAP、本地文件或其他东西)针对各种来源对用户进行身份验证。可以定义多个登录模块,并且您可以指定登录模块的某些组合必须“成功”才能进行身份验证。

实际的用户名和密码是通过定义在 元素中的 web.xml 文件(对于 servlet)中定义的机制传入的。

假设上述过程是正确的(也可能不是):

  • 整个身份验证过程是否属于 JAAS 之类的规范,或者 JAAS 只是此过程的一小部分或可选部分?
  • 是否所有类型的 (即 BASIC、DIGEST 和 FORM)都适用于所有类型的登录模块? This page似乎不建议这样做,但我没有看到任何与 选项 选项匹配的明确文档。
  • 从登录配置到登录模块的用户名和密码流程似乎很简单,但是像 OpenID 或 OAuth 这样有中间步骤(如重定向到外部登录页面)的系统会发生什么?
  • Seam 3 Security 之类的项目怎么样? , Apache ShiroSpring Security适合这张照片吗?
  • 最佳答案

    JavaEE 安全规范给容器实现者留下了很大的空间,所以我将专注于 JBoss 的实现来回答。

    JBoss 安全实现

    JBoss 依靠 JAAS 身份验证来实现 JavaEE 安全性。这样它就可以从稳定的 API 中受益,并且可以使用 existing LoginModule implementations .登录模块用于验证主题,也用于向 Subject 添加角色。 . JAAS 提供了用于授权、权限检查的机制,JBoss 在内部使用它。

    雅思 LoginModule不仅支持基于密码的身份验证,还支持基于 token 的身份验证。

    基于 token 的身份验证

    HTTP Negotiation support for Kerberos SPNEGO 是 JBoss 中借助 JAAS 可以完成的一个很好的例子。 : 一个额外的auth-method命名为 SPNEGO借助 Tomcat Authenticator 实现, token 验证使用 JavaSE standard Kerberos LoginModule .

    顺便说一句,LoginModule API 不是必需的,对于某些协议(protocol)来说它甚至可能过于复杂。例如,支持 OpenID with PicketLink 的实现仅使用 Servlet API。

    第三方安全库

    这些库通常为运行 JavaEE 或纯 Java 上下文的应用程序提供安全层,即使它没有从 JavaEE 规范中获得身份验证或基于角色的授权的好处。

    Spring Security 为应用开发者提供了除 JavaEE 安全之外的其他抽象来实现认证和授权,主要归功于 ServletFilter当涉及 Web 应用程序时。可以使用大量选项来保护他的应用程序:可以混合使用多个选项,例如:JAAS 使用、JavaEE 容器安全使用或 Spring Security 特定实现(OpenID 和 OAuth 的情况)。也没有对 JavaEE 的依赖,因此在 JavaSE 上运行时几乎可以在任何情况下使用它。大多数架构师选择在 Spring Security 上构建应用程序安全性,以便将来可以自由切换特定的实现。

    Apache Shiro 与 Spring Security 非常相似,但它更年轻并且可能更容易设置。

    Seam 安全性不依赖于 JavaEE 安全性或 JBoss,而仅依赖于 Servlet 和 JSF API。对于基于 JSF/Seam 的 Web 应用程序,这显然是最简单的选择。在幕后,它使用 PicketLink实现。

    作为结论 ,使用第三方库来补充或替代 JavaEE 安全性的问题取决于架构选择:应用程序复杂性、供应商独立性和可移植性、对实现错误修复或改进的控制。在您的特定上下文中,拥有多个身份验证源需要一个灵活的解决方案,例如支持 authentication provider chaining 的 Spring Security (或四郎)。

    关于spring-security - 了解 Java 应用程序服务器中的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9917858/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com