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

Web services 用于保护iOS/Android应用程序基于REST的服务的选项,web-services,rest,spring-security,oauth-2.0,restful-authentication,Web Services,Rest,Spring Security,Oauth 2.0,Restful Authentication,我正在开发一个实现在线购物功能的web应用程序。我正在使用Struts2+Spring+Hibernate。我正在使用Spring security实现授权和身份验证。 现在,我的客户希望为我的web应用程序开发一个iOS/Android应用程序,我的web应用程序的用户可以登录并使用该应用程序的一些功能。 移动应用程序将访问JSON上基于REST的web服务,JSON将使用Jersey实现。以下是我的问题: 用户将拥有其中三个角色中的一个角色。根据角色的不同,他们应该能够访问特定的资源。我正在

我正在开发一个实现在线购物功能的web应用程序。我正在使用Struts2+Spring+Hibernate。我正在使用Spring security实现授权和身份验证。
现在,我的客户希望为我的web应用程序开发一个iOS/Android应用程序,我的web应用程序的用户可以登录并使用该应用程序的一些功能。
移动应用程序将访问JSON上基于REST的web服务,JSON将使用Jersey实现。以下是我的问题:

  • 用户将拥有其中三个角色中的一个角色。根据角色的不同,他们应该能够访问特定的资源。我正在考虑将SpringSecurity2.0与Jersey一起使用,并使用OAuth2.0对用户进行身份验证。OAuth 2.0是正确的适用选择吗

  • 另外,Jersey在服务器端不支持OAuth2.0。不过,我想我应该能够使用任何其他OAuth提供商来保护Jersey服务,对吗

  • 如果oAuth不是正确的选择,那么我可以使用什么为我的REST web服务的移动应用程序用户提供基于角色的身份验证和授权


  • 不要忘记,您可以使用简单的HTTP基本身份验证(当然是SSL)


    有关OAuth版本的比较,请参见

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

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

  • 谷歌实际上提供了这样的服务。如果您将后端托管在appengine上,您可以使用云端点公开API,它们负责身份验证和授权。

  • 您可以创建自己的体系结构。基本方法是拥有一个授权服务器(用于生成令牌)、一个资源服务器(用于为您的API提供服务)以及某种类型的用户和令牌存储


  • 希望这能有所帮助,我个人将与UAA一起尝试。

    您好,我现在正在处理同样的问题,您是否找到了解决方案?我个人认为可能会使用couldfoundry的UAA,因为实现我自己的身份验证服务器和资源服务器似乎有点过分。@radichev不,我现在一直把它放在backburner上,因为我正忙于其他事情。但是,是的,我会在重新启动后进行更新。如果你能成功地用你的实现来回答这个问题,那就太好了。谢谢此外,我已经放弃了使用JERSEY的想法,将使用SpringMVC支持RESTThank。正如我在回来时所说的,如果你的回答好的话,我会评估并接受你的回答。嗨,Radi,事实上,我是在这方面开始工作的,我觉得使用OAuth2会有点过分,因为我的不是一个公共API。所以我选择了简单的选项JWT代币。当用户第一次登录时,我创建了一个签名的JWT令牌。然后,该令牌将在每个后续请求的报头中发送。我验证令牌的签名和令牌的有效期。如果未过期且签名匹配,我将继续,否则我将拒绝该请求。目前,我已将到期时间保持足够长,以便用户不必每次令牌到期都登录。目前,它的实现非常简单,我将继续添加处理来自两台设备的多次登录等功能。如果您发现我的实现中存在任何问题或改进,请提出建议