【问题标题】:Authentication and authorization frameworks for java GUI applicationsjava GUI 应用程序的身份验证和授权框架
【发布时间】:2011-02-07 00:43:58
【问题描述】:

我们正在使用 swing 编写具有丰富 GUI 客户端的三层应用程序,我们需要添加一些身份验证和授权控制。 我对这个主题完全陌生,所以我在网上做了一些研究。我的第一个意图是将 JAAS 用于此功能,但据我所知,JAAS 仅包含执行特权方法/操作的功能,但似乎没有功能可以确定是否授予某些“操作”访问权限以控制图形用户界面。例如隐藏/禁用某些菜单等。

我理解错了还是我的方法错了?有没有 JAAS 的替代品?是否存在向 GUI 应用程序添加身份验证和授权的“最佳实践”?

感谢您的帮助, 恩尼

【问题讨论】:

    标签: java security authentication authorization jaas


    【解决方案1】:

    富 GUI 客户端与标准网站没有什么不同。两者都是客户端,并且控制着潜在的攻击者。因此,无论您想到什么安全措施,一个有决心的人都可以打破它。 请记住,在 UI 上隐藏/禁用按钮的整个想法是可用性,而不是安全性。

    首先,向所有用户显示所有按钮,但要确保如果正常点击管理按钮,服务器不允许这样做。正确获得服务器端身份验证后,添加 shims 以隐藏/禁用 UI 上的按钮。为此,您可以编写一个返回登录用户拥有的角色/权限的服务。

    JAAS 是一种完美的服务器端身份验证技术。您应该能够找到很多文档来保护服务器资源。

    您的用户必须登录到 Swing GUI,并且必须通过服务器的身份验证。这是最重要的一步。如果您不使用服务器对用户进行身份验证,那么它根本没有安全性。

    此后,每次按钮单击,用户操作都会转到服务器,服务器会验证用户是否具有权限。如果他不这样做,则向客户端抛出异常。这样,如果有人通过某种诡计启用了您的按钮,服务器就会捕获它。

    【讨论】:

    • 那么我是否理解正确,您建议在服务器端实现 JAAS?服务器与 WebService 一起工作,在这种情况下,每次调用 WebService 例程时我都需要传递身份验证信息,或者我需要在服务器上长时间维护 LoginContext,这是我们不想要的。跨度>
    • 不要在每个请求中都传递登录名/密码。相反,只需传递一个会话标识符/令牌,即使是常规的 jsessionid 也可以。您可以选择在一段时间不活动后使会话过期,在这种情况下,您不必长时间维护 LoginContext(但用户必须再次登录)。或者您可以让它们长期存在,在这种情况下,您必须将会话标识符保存在数据库中。
    【解决方案2】:

    虽然@sri 的回答提出了一些好处,但“只传递会话标识符/令牌”的建议是危险的,因为它太容易被欺骗。您需要建立一个由可信来源验证的通用上下文。请查看org.ietf.jgss.GSSContext 了解详情。

    为了让 GSS 上下文正常工作,您将接触到 Key Distribution Center (KDC) 的概念,这通常会导致 Kerberos 和正常的某种目录服务器 - 抱歉,我有点含糊,但不知道只是你所拥有的很难具体说明,即使那样我也只使用 Active Directory 完成了这项工作。

    一旦您对所有内容进行了身份验证,您就可以返回到保护某些功能的原始点。

    身份验证过程将提供一个javax.security.auth.Subject,其中将包含一个或多个java.security.Principals。这些主体可与 JAAS 一起使用,以创建使用主体的策略文件,如 here 所述。通常,您使用主体来表示用户拥有的角色,这些角色是从目录服务器加载的。过去我专门使用登录模块来执行此操作,尽管可能有更好的方法。

    这已经锁定了所有内容,所以最后一步是让它对用户来说看起来很漂亮,据我所知,在这里,你只能靠你自己了。您可以简单地启用所有功能,并在无法执行操作时警告用户,或者让主题根据组成员身份执行更复杂的操作。

    【讨论】:

      【解决方案3】:

      使用 JAAS

      JAAS 是一个通用框架,不会提供任何特定于应用程序的功能,例如禁用/启用按钮等。 您必须将该授权逻辑嵌入到您的应用程序中,JAAS 为您提供了在这种情况下派上用场的经过身份验证/授权的 Principal 对象的句柄。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多