从Spring RESTful资源服务器验证OAuth 2.0访问令牌

时间:2013-07-14 18:14:36

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

我想保护我的Spring RESTful后端。一种方式(右边?)是使用OAuth 2.0,如下所示:

http://www.youtube.com/watch?v=8uBcpsIEz2I

在我的架构中,资源服务器和授权服务器不是相同的实体。我真的只是提供一些JSON REST服务。没有UI。如果我读了OAuth2 RFC他们只是说:

  

授权服务器和资源服务器之间的交互      超出了本规范的范围。授权服务器      可以是与资源服务器相同的服务器或单独的实体。      单个授权服务器可以发出接受的访问令牌      多个资源服务器。

我在cloudfoundry.com上找到了一个很好的图表(与上面的youtube视频相关),我用它来说明我的观点:

enter image description here

“令牌”提供商:这可能/应该是google或facebook。

RESTful后端:这实际上是我的代码。 Spring RESTful服务,如:

@Controller
@RequestMapping("/api/v1")
public class MyResourceToProtect {

    @Autowired
    private MyService service;

    @RequestMapping(value = "/resource/delete/{name}",
                    method = RequestMethod.DELETE,
                    consumes = MediaType.APPLICATION_JSON_VALUE,
                    headers = "Content-Type=application/json")
    @ResponseStatus(HttpStatus.OK)
    public void delete(@PathVariable("name") String name) {
        service.delete(name);
    }
}

(这只是一些示例代码)

现在我的问题:是否有可能验证由AuthServer(Facebook,Google)生成的访问令牌?我知道我需要在ResourceServer的某个地方有一个“令牌到用户”映射(数据库)。基本上我想设计一个来自PayPal的RESTful API:

https://developer.paypal.com/webapps/developer/docs/integration/direct/make-your-first-call/

但我怎样才能处理步骤1& 2如果我想使用Facebook或Google作为auth提供商?这甚至可能吗?

其他想法:可能我需要提供自己的/oauth2/token端点,然后委托给基础的AuthProvider。

1 个答案:

答案 0 :(得分:4)

不确定怎么回答所有问题,所以我只想提出以下几点:

  • 您是否尝试以OAuth安全的方式使用Facebook等OAuth安全API?使用Spring Social。
  • 如果您正在尝试创建OWN REST API并使用您的OWN用户上下文,请使用Spring Security OAuth。在这种情况下,您需要客户使用OAuth对您的API进行身份验证,而不是Facebook或LinkedIn等。
  • Spring社会安全(在1.2.x系列中)支持通过OAuth连接“签署”用户(例如,'与facebook签名','..叽叽喳喳','.. linkedin'等。,并且您的应用程序最终会在会话中以Spring Security主体结束,就像您使用HTTP表单手动签署用户一样。
  • Spring Security OAuth并不关心从哪里获得Spring Security主体。它只关心主体是否具有Spring Security OAuth客户端所需的正确角色/范围。因此,没有理由不能使用Spring Social安全地连接到Facebook,使用Spring Social Security让该连接创建Spring Security Authentication对象,然后使用Spring Security OAuth保护对您的API的任何访问,转身可能会在幕后安全地连接到Facebook的API。客户端会为您的API使用OAuth访问令牌,而不是Facebook。这在服务中处理。