用于内部REST通信的OAuth + spring安全性

Pet*_*ete 7 java rest oauth spring-security oauth-2.0

建立

我们正在使用Java和Spring开发分布式应用程序,其中我们现有的客户端前端(包括自己的身份验证,数据库,帐户等)使用REST调用来访问我们的新服务器以获取其他服务.我们想用Oauth保护这些资源.

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

因此,我们在服务器端设置了spring security,以提供应该用于限制对资源的访问的帐户.该用户应登录客户端上,然后只能够访问这些服务器资源分配给他.我们有一些注册过程,在客户端设置用户以便能够访问服务器服务,因此我认为应该在那里进行任何帐户设置.

所以问题是

如何让客户端获取受保护资源的访问令牌,而无需用户登录其服务器端帐户?

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

我的想法

这不行

我想我要告诉客户一个在服务器端为该用户创建的新帐户(但是,我将如何选择和传递密码?)或将客户端帐户同步到服务器,以及使用这些凭据来针对服务器对客户端进行身份验证并生成访问令牌.但是这可以节省多少?此外,服务器在其帐户上具有更高的安全性(单向加密,盐渍密码),我真的不想通过使用较少保存的客户端帐户来妥协.

也许这会吗?

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

另外:哪个更适合OAuth 1或2的任务?

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

谢谢你的帮助!

Pet*_*ete 1

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

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


关于使用基于客户端的用户帐户对服务器进行身份验证,我们没有得到任何进一步的信息。

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

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

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

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