Java GUI应用程序的身份验证和授权框架

时间:2010-04-12 13:55:52

标签: java security authentication authorization jaas

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

我明白这个错误还是我的方法错了? JAAS还有其他选择吗?是否存在向GUI应用程序添加身份验证和授权的“最佳实践”?

感谢您的帮助, ENY

3 个答案:

答案 0 :(得分:3)

丰富的GUI客户端与标准网站没有什么不同。两者都是客户端,并控制潜在的攻击者。所以无论你想到什么样的安全感,坚定的人都可以打破它。 请记住,在UI上隐藏/禁用按钮的整个想法是可用性,而不是安全性。

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

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

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

此后,每按一次按钮,用户操作就会转到服务器,如果用户有权限,该服务器会进行身份验证。如果他没有,请将异常退回给客户。这样,如果有人通过一些技巧启用你的按钮,服务器就会抓住它。

答案 1 :(得分:0)

虽然@sri的答案提出了一些好处,但“传递会话标识符/令牌”的建议很危险,因为它太容易被欺骗了。您需要建立一个由受信任的来源验证的公共上下文。有关详细信息,请查看org.ietf.jgss.GSSContext

为了让GSS上下文工作,你将接触Key Distribution Center (KDC)的概念,这通常会导致Kerberos和正常的某种目录服务器 - 抱歉我有点模糊但是如果不知道你有什么特点,那么很难具体,即便如此,我只使用Active Directory完成了这项工作。

一旦您完成了所有身份验证,您就可以回到保护某些功能的原始点。

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

这一切都被锁定了,所以最后一步是让它看起来很漂亮,在这里,据我所知,你是独立的。您可以简单地将所有内容保留为启用状态,并在无法执行操作时警告用户,或者您已经根据组成员身份执行了更复杂的操作。

答案 2 :(得分:0)

使用JAAS

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

相关问题