Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java GUI应用程序的身份验证和授权框架_Java_Security_Authentication_Authorization_Jaas - Fatal编程技术网

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

java GUI应用程序的身份验证和授权框架,java,security,authentication,authorization,jaas,Java,Security,Authentication,Authorization,Jaas,我们正在使用swing使用富GUI客户端编程一个三层应用程序,我们需要添加一些身份验证和授权控制。 我对这个话题完全陌生,所以我在网上做了一些研究。我的第一个意图是将JAAS用于此功能,但就我所见,JAAS只包含执行特权方法/操作的功能,但似乎没有任何功能来确定是否为某些控制GUI的“操作”授予访问权限。e、 g.隐藏/禁用某些菜单等 我理解错了还是我的方法错了?除了JAAS还有其他选择吗?是否存在向GUI应用程序添加身份验证和授权的“最佳实践” 谢谢你的帮助, Eny富GUI客户端与标准网站没

我们正在使用swing使用富GUI客户端编程一个三层应用程序,我们需要添加一些身份验证和授权控制。 我对这个话题完全陌生,所以我在网上做了一些研究。我的第一个意图是将JAAS用于此功能,但就我所见,JAAS只包含执行特权方法/操作的功能,但似乎没有任何功能来确定是否为某些控制GUI的“操作”授予访问权限。e、 g.隐藏/禁用某些菜单等

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

谢谢你的帮助,
Eny

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

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

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

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


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

尽管@sri的回答提出了一些好的观点,“只传递会话标识符/令牌”的建议是危险的,因为它太容易被欺骗。您需要建立一个由可信源验证的公共上下文。请查看
org.ietf.jgss.GSSContext
,了解这方面的详细信息

为了让GSS上下文正常工作,您将接触到a的概念,这通常会导致Kerberos和某种目录服务器-抱歉,我有点含糊不清,但不知道您有什么,很难具体说明,即使这样,我也只对Active directory进行了说明

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

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

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

使用JAAS

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

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