如何保护 JSF 应用程序客户端和服务器端 REST API 模块

Posted

技术标签:

【中文标题】如何保护 JSF 应用程序客户端和服务器端 REST API 模块【英文标题】:How to secure JSF application client and server-side REST API module 【发布时间】:2018-03-21 15:43:03 【问题描述】:

我正在尝试找到一种解决方案来在我的应用程序中实现身份验证和授权,该应用程序通过 REST API 公开服务并且目前有一个 Web 应用程序客户端:

| Web 应用程序客户端 | -> JSF / Primefaces | REST API | -> JAX-RS / 泽西岛 |业务逻辑和持久化 API | -> EJB / JPA |数据库 | -> mysql REST API 公开了几个服务,其中还有一个登录服务。我正在考虑通过在每个客户端请求上根据我的身份验证机制(也在上面提到的登录服务后面使用)读取和检查用户的凭据来保留 REST 无状态约束。

在 Web 应用程序方面,我可能会检查受保护的资源访问(阻止 URI 访问、启用/禁用 GUI 按钮),使用我在 REST 登录调用后作为响应获得的用户和相关角色信息,并将这些信息保存在HTTP 会话。

现在,当在 Web 应用程序级别检查并验证某些用户的操作已被授予时,将再次在 REST API 级别执行第二次检查。

您认为这种方法正确吗? 我试图了解是否可以避免对两层的授权进行双重检查。

此外,我正在评估在我的一层或两层中引入 Spring Security,我可以利用它吗?

提前致谢,祝你有美好的一天!

【问题讨论】:

【参考方案1】:

我认为您可以采取两种方法来保护您的应用程序(身份验证方面):

    http升级为https,客户端发送请求时可以查看证书。 使用基本或摘要身份验证(更好的摘要,如果您想足够安全)来验证登录过程,并将唯一令牌返回给客户端。在每个请求到达时验证令牌。

您不必检查每个请求的用户凭据,只需检查令牌即可。

【讨论】:

HTTPS 和 digest auth 肯定会有很大的改进,谢谢。但是我编辑了我的问题,试图更好地解释我的问题:“令牌”解决方案有利于身份验证,但授权呢? 我错过了它是一个web应用程序,你可以使用spring security来管理服务器端的认证和授权。

以上是关于如何保护 JSF 应用程序客户端和服务器端 REST API 模块的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JSF-Spring 集成应用中启用 CSRF 保护

JSF 验证是客户端还是服务器端?

如何创建 JSF 过滤器/url 模式来保护 javascript

如何从服务器端访问使用 res.cookie 设置的 cookie 到客户端浏览器,现在想要访问它们到服务器端

具有延迟加载、过滤和排序的 jsf 数据表

JSF 2 上的 Https,用于受保护的资源和登录