保护Java Rest服务:JSON WebToken(JWT)还是oAuth 1.0?

时间:2017-07-31 14:13:37

标签: java-ee oauth dojo jax-rs jwt

我想知道,JWT或oAuth 1.0是确保Rest服务安全的最佳方法。我们计划开发基于Dojo的Web应用程序和基于JAX-RS休息的Web服务。有人可以帮我解决这个问题吗? / p>

如果您可以建议一些示例代码在Java中实现相同的代码,那将是非常好的。

先谢谢。

2 个答案:

答案 0 :(得分:1)

JWT和OAuth是标准。 JWT标准告诉我们如何创建将在服务器和客户端(浏览器或API)之间共享以保持状态的令牌。 传统上,我们使用jsession ID作为令牌,由服务器创建,然后以cookie或URL中的查询发送给客户端。那个jession Id后来由客户端提交给服务器每次请求。这是服务器用于查找服务器内存中存在的会话对象的标识符。

现在JWT是另一种维护会话的方法。与会话对象保持用户详细信息一样,JWT令牌在令牌本身中包含用户信息的方式相同。由于我们将JWT称为值令牌,因为它们包含信息本身。 jsession Id是引用令牌,因为它是对服务器维护的会话对象的引用。

JWT也有优点和缺点: 优点:最适合集群环境 缺点:当令牌包含安全信息时,不应使用。由于JWT被编码,因此它们可能被恶意用户通过网络攻击。同时jsession id只是一个引用,而实际数据仍然存在于session对象中。

因此,根据您的要求,您希望保留在会话中的内容从选项中选择。

OAuth:这是授权的标准,这里客户端服务器需要授权服务器授权用户数据(资源所有者)。 OAuth 2的基本示例:假设有一个在服务器上运行的在线游戏应用程序,用户访问了开始加载到用户浏览器中的应用程序。现在该应用程序要求用户授权在他的Facebook帐户上发布有关游戏的数据。在这里,用户授权他的应用程序通过OAuth Standard访问他的Facebook帖子。请参阅内部机制https://tools.ietf.org/html/rfc6749

基本上,应用程序的安全性涉及三个主要方面。 1.认证 你是谁? 可以通过open id或传统的基于登录的方法来完成 2.授权 您授权访问的资源? 可以通过Oauth来实现 3.完整性约束 通过安全TLS层(SSL / HTTPS)访问我的应用程序

任何Web应用程序都必须满足这些需求才能变得安全。

答案 1 :(得分:1)

这些是无法比拟的事情。 OAuth是关于3d方服务的SSO(单点登录)方案,而JWT仅涉及身份验证令牌格式。至少OAuth是一个高于标准的水平。 OAuth 1.0需要客户端加密,而其2.0版本则不需要。 JWT允许在一个安全领域中结合无状态REST服务,如果将REST API拆分为多个微服务,这是一个巨大的优势。