为iOS / Android应用程序保护基于REST的服务的选项

时间:2014-05-04 13:20:16

标签: web-services rest spring-security oauth-2.0 restful-authentication

我正在开发一个实现在线购物功能的Web应用程序。我正在使用Struts2 + Spring + Hibernate。我正在使用Spring安全性来实现授权和身份验证

现在我的客户想开发一个iOS / Android应用程序,我的Web应用程序的用户可以登录并使用该应用程序使用某些功能。
        

移动应用程序将访问基于REST的基于JSON的Web服务,该服务将使用Jersey实现。以下是我的问题:

  1. 用户将从三个角色中获得角色。根据角色,他们应该能够访问特定资源。我正在考虑使用带有Jersey的Spring Security 2.0并使用OAuth 2.0对用户进行身份验证。 OAuth 2.0是否适用?

  2. 此外,Jersey并不支持服务器端的oAuth 2.0。我仍然认为我应该能够使用任何其他OAuth提供商来保护泽西岛服务吗?

  3. 如果oAuth不是正确的选择,那么我可以使用它为移动应用用户提供基于角色的身份验证和授权到我的REST Web服务。

2 个答案:

答案 0 :(得分:1)

不要忘记您可以使用简单的HTTP BASIC身份验证(当然还有SSL)。

有关OAuth版本的比较,请参阅this.

答案 1 :(得分:0)

在处理完同样的问题后,我做了一些研究,目前我可以看到3个解决方案。

  1. Pivotal实际上有一个他们用于cloudfoundry服务的软件,称为UAA(用户帐户和身份验证)服务器。您可以将其部署到您自己的服务器,它的作用基本上是提供OAuth2访问令牌。如果请求中提供了正确的OAuth令牌,您将需要创建自己的资源服务器,该服务器将提供不同的资源。 (他们在UAA回购中有几个示例应用程序可以使用)https://github.com/cloudfoundry/uaa

  2. Google实际上提供了类似的服务。如果您将后端托管在appengine上,则可以使用云端点公开API,并负责身份验证和授权。 https://cloud.google.com/appengine/docs/java/endpoints/

  3. 您可以创建自己的架构。基本方法是拥有一个授权服务器(用于生成令牌),一个资源服务器(用于提供API)以及用户和令牌的某种存储。

  4. 希望有所帮助,我个人会去UAA尝试一下。