Java 从Spring RESTful资源服务器验证OAuth 2.0访问令牌
我想保护我的Spring RESTful后端。一种方法(正确?)是使用OAuth 2.0,如下所示: 在我的体系结构中,资源服务器和授权服务器不是同一个实体。我只是提供一些JSON REST服务。没有用户界面。如果我读了这本书,他们只会说: 授权服务器和资源服务器之间的交互 超出了本规范的范围。授权服务器 可以是与资源服务器相同的服务器,也可以是单独的实体。 单个授权服务器可能会颁发由用户接受的访问令牌 多个资源服务器 我在(与上述youtube视频相关的)上找到了一个很好的图表,我用它来说明我的观点: “代币”提供商:例如,可以/应该是谷歌或facebook RESTful后端:这实际上是我的代码。Spring RESTful服务,如: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视频相关的)上找到了一个很好的图表,我用它来说明
@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。这将在服务中处理