2013-07-14 138 views
13

我想保护我的Spring RESTful后端。一种方法(→右侧)是使用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后端:这实际上是我的代码。春天的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,谷歌)生成的访问令牌?我知道我需要在我的ResourceServer上有一个“token to user”映射(数据库)。基本上,我想从贝宝设计我的RESTful API像一个:

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

但我怎么能处理的步骤,如果我想使用Facebook或谷歌作为身份验证提供者1 & 2?这甚至有可能吗?

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

回答

4

不知道该如何回答都用一个漂亮的蝴蝶结的问题,所以我只是把以下几点那里:

  • 你们是不是只是一个消费OAuth的安全API,如Facebook的OAuth保护时尚?使用Spring社交。
  • 如果您尝试创建OWN REST API并使用您的OWN用户上下文,请使用Spring Security OAuth。在这种情况下,您需要客户使用OAuth对您的API进行身份验证,而不是Facebook或LinkedIn等。
  • Spring Social Security(在1.2.x系列中)支持通过OAuth“签名”用户连接(例如,'用facebook登录','..twitter','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。这在服务中得到处理。
+0

我的用例与OP非常相似,我怀疑@domi的回答也回答了我当前的问题 - 如果我有一个使用Spring Social编写的“前端”应用程序,并且它有一个来自Google的OAuth访问令牌,该“前端”应用程序应该如何将该访问令牌传递给我的Spring Security应用程序?我们已经尝试通过“身份验证:”标题传递,但无济于事。 –

相关问题