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

时间:2013-01-02 09:37:27

标签: java rest oauth spring-security oauth-2.0

设置

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

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

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

所以问题是

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

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

我的想法

这不会做

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

也许会这样?

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

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

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

因此,我们目前的状态是使用 OAuth2 ,主要是为了简单起见。我们也确定它可能存在的安全漏洞,我们可以根据需要覆盖自己,并且很可能在未来由实施供应商或IETF解决。

为了处理REST服务器和REST客户端之间的通信(在我们的控制中),我们使用以前称为2-legged身份验证,现在是客户端凭据授权。我已经就此问题提出了几个问题,包括


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

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

但是,如果有人对如何解决这个问题有一个好主意,我们会捡起它,只是为了进一步加强安全性。所以,我会把这个问题保持开放。

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

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