java - 用于内部 REST 通信的 OAuth + spring security

标签 java rest oauth spring-security oauth-2.0

设置

我们正在使用 Java 和 Spring 开发一个分布式应用程序,我们现有的客户端前端(具有自己的身份验证、数据库、帐户等)使用 REST调用以访问我们的新服务器以获取其他服务。我们希望通过 Oauth 保护这些资源。

访问应受角色或帐户限制。但是,我们不希望客户端的用户不得不担心除了已经现有帐户 之外的任何其他身份验证。同时,我们需要为第三方应用程序提供一种在向服务器进行某种注册后从外部访问某些资源的方法(这就是我们首先进行分发的原因)。

所以我们在服务器端设置了spring security来提供应该用来限制访问资源的账户。 用户应在客户端登录,然后只能访问分配给他的那些服务器资源。我们有某种注册流程,可以在客户端设置用户以访问服务器服务,因此我认为任何帐户设置都应该在那里完成。

所以问题是

如何使客户端能够在用户无需登录其服务器端帐户的情况下获取 protected 资源的访问 token ?

如何在不需要任何用户输入的情况下设置服务器端帐户?

我的想法

这不行

我想我必须要么告诉客户端在服务器端为该用户创建了一个新帐户(但是,我将如何选择和传达密码?)或将客户端帐户同步到服务器,并使用这些凭据根据服务器对客户端进行身份验证并生成访问 token 。但这能节省多少呢?此外,服务器在其帐户上具有更高的安全性(一种加密、加盐密码),我真的不想通过使用保存较少的客户帐户来破坏这一点。

也许这会?

也许要走的路是在第一次身份验证时告诉服务器有关客户端帐户的信息,在服务器端创建一个帐户,将生成的 token 存储在客户端,然后使用该 token 在服务器上对客户端进行身份验证对于每个后续请求..?服务器是否能够通过每个请求的 token 使用其服务器端帐户登录客户端? 我需要一个只能从客户端服务器访问的初始(两条腿?)握手的特殊资源,对吗?

还有: OAuth 1 或 2 哪个更适合这项任务?

我希望有人能理解我的问题并帮助我解决可能的误解和知识空白(我现在正在阅读 Oauth 和 spring 安全文档,所以如果我想出更清晰的图片和因此更清楚该做什么的问题)

感谢您的帮助!

最佳答案

所以我们目前的状态是使用 OAuth2 主要是为了简单起见。我们还确信它可能存在的与安全相关的缺陷我们可以根据需要自行解决,并且它们很可能在未来由实现供应商或 IETF 解决。

为了处理 REST 服务器和 REST 客户端(均在我们的控制之下)之间的通信,我们使用以前称为双足身份验证的方法,现在使用客户端凭证授予。我已经问了一些关于 SO 的问题,包括


关于使用基于客户端的用户帐户对服务器进行身份验证,我们没有进一步了解。

现在,我们像以前一样针对我们的旧客户端 Web 应用程序对用户进行身份验证,然后针对 2-legged 服务器对客户端进行身份验证。从理论上讲,这将允许任何用户使用客户端访问 token 访问任何资源,但现在这对我们来说没问题,所以我们不会进一步调查这条路。

不过,如果有人对如何解决这个问题有好的想法,我们会采纳它,只是为了进一步加强安全性。所以,我将保留这个问题。

我目前的想法是在身份验证服务器上使用生成的 secret 为每个用户注册一个新的客户端 ID,然后将它们同步回客户端服务器,并使用这些 client_id/secret 组合来访问代表的用户的资源通过客户端凭据流中生成的 client_id。

对于我们最新的应用程序,我们会将帐户存储在 REST 服务器(身份验证提供程序)上并让用户登录该服务器,然后使用 token 访问规范预期的 REST 资源。

关于java - 用于内部 REST 通信的 OAuth + spring security,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14119683/

相关文章:

javascript - Chrome 扩展程序 OATH 401 错误(未经授权)

javascript - 使用 $http.get() 通过 Angular 下载远程文件 - OAuth 身份验证

java - 将 JDBCTemplate 与 Hibernate SessionFactory 一起使用?

java - Spring Batch 将并发线程数限制为 10

java - 如何将参数从prototypejs客户端传递到rest web服务

Java Spring Rest API。返回引用的对象或对象的 id?

curl - 将 CURL 与 oauth 结合使用用于桌面沙发

java - 静态类初始化什么时候发生?

java - 如何使 JDK 成为默认的 JRE?

spring - JAX-RS Bean 验证的自定义异常映射