java - 客户端(java standalone client)应用认证和用户认证的区别

标签 java authentication ssl client-side

在 webapplicaiton 的情况下,我可以理解客户端身份验证和用户身份验证之间没有区别;忽略 XSS 和其他漏洞,web 客户端由服务器/servlet 生成。

但假设您有一个与 Java 服务器应用程序通信的 Java 客户端应用程序;服务器有一个与之关联的证书,以便客户端可以验证和验证服务器是否受信任。现在客户端也有一个证书(client cert),这样服务器就可以验证这是否是一个可信的客户端;一旦完成这种相互身份验证,就可以将用户证书(用户证书)传递给服务器,而不是向用户显示用户名/密码对话框。

问题是在这种情况下拥有(客户端证书)是否有任何优势/用途;或者仅凭用户证书就足以信任客户端吗??

我知道这是一个显而易见的问题/但不能创建一个恶意客户端应用程序吗??客户端证书也将针对这种情况提供保护。

最佳答案

任何时候你有一个客户端服务器应用程序,服务器需要假设客户端被破坏。当发生身份验证时(用户名/密码、证书等……无关紧要),服务器应授予用户某些使用服务器功能的权限。每当向服务器发出请求时,服务器都需要检查经过身份验证的用户是否有权执行该操作。

相信客户端只发出授权请求会使自己容易受到攻击。如果您检查服务器上的权限并删除输入,那么您不必担心用户是否正在使用受信任的客户端,因为即使是不受信任的客户端也无法比受信任的客户端使用相同的身份验证凭据做更多的事情.

无论您使用的是网络客户端还是独立客户端,这些原则都适用。即使在 Web 应用程序中,我也可以编写新的客户端和 POST 数据,使用 RESTful 服务,或者通常与 Web 服务器通信并完全绕过您呈现给我的 Web UI。

关于java - 客户端(java standalone client)应用认证和用户认证的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3556110/

相关文章:

php - 测试客户端浏览器中是否安装了客户端证书

java - 用于 Web 应用程序的 JPF(Java 路径查找器)

java - JList 覆盖单元格的 toString 以正确显示

mysql - CRUD 管理员 : Why not use MySQL users for auth/acl instead of User/Group tables?

java - SoftLayer SSL VPN 门户 java.lang.NullPointerException @macOS Sierra

ssl - 确定 TCP 连接是否使用 SSL

java - 如何从 kerberos 票证中检索组成员资格?

java - gradle 在 POM 中发布带有源文件和依赖项的 Jar

c# - 在 ASP Net Core 中实现两个身份验证选项( token 和证书)

c - 如何检查用户列表是否已登录?