Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Spring RESTful资源服务器验证OAuth 2.0访问令牌_Java_Spring_Rest_Spring Security_Oauth 2.0 - Fatal编程技术网

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

Java 从Spring RESTful资源服务器验证OAuth 2.0访问令牌,java,spring,rest,spring-security,oauth-2.0,Java,Spring,Rest,Spring Security,Oauth 2.0,我想保护我的Spring RESTful后端。一种方法(正确?)是使用OAuth 2.0,如下所示: 在我的体系结构中,资源服务器和授权服务器不是同一个实体。我只是提供一些JSON REST服务。没有用户界面。如果我读了这本书,他们只会说: 授权服务器和资源服务器之间的交互 超出了本规范的范围。授权服务器 可以是与资源服务器相同的服务器,也可以是单独的实体。 单个授权服务器可能会颁发由用户接受的访问令牌 多个资源服务器 我在(与上述youtube视频相关的)上找到了一个很好的图表,我用它来说明

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

在我的体系结构中,资源服务器和授权服务器不是同一个实体。我只是提供一些JSON REST服务。没有用户界面。如果我读了这本书,他们只会说:

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

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

“代币”提供商:例如,可以/应该是谷歌或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上的某个地方有一个“令牌到用户”映射(数据库)。基本上,我想设计我的RESTful API,就像PayPal的API一样:

但是,如果我想使用Facebook或Google作为身份验证提供商,我如何处理步骤1和2?这可能吗


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

不知道如何轻松地回答所有问题,因此我只想指出以下几点:

  • 您是否正试图以OAuth安全的方式使用像Facebook这样的OAuth安全API?使用Spring社交网站
  • 如果您试图创建自己的RESTAPI并使用自己的用户上下文,那么请使用SpringSecurityOAuth。在这种情况下,您将要求客户端使用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安全性身份验证对象,然后使用Spring Security OAuth来保护对API的任何访问,这反过来可能会在后台安全地连接到Facebook的API。客户端将对您的API使用OAuth访问令牌,而不是Facebook。这将在服务中处理

我的使用案例与OP非常相似,我怀疑您对@domi的回答也回答了我当前的问题-如果我有一个使用Spring Social编写的“前端”应用程序,并且它从Google获得了OAuth访问令牌,那么“前端”应该怎么做应用程序是否将该访问令牌传递给我的Spring Security应用程序?我们已尝试通过“Authentication:”标头传递该令牌,但没有效果。我发现这个主题已经很老了,现在我也遇到了同样的情况。您是如何解决此问题的?