验证来自 Spring RESTful 资源服务器的 OAuth 2.0 访问令牌

2024-01-12

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

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

在我的架构中,资源服务器和授权服务器ARE NOT同一实体。我实际上只是提供一些 JSON REST 服务。没有用户界面。如果我读到OAuth2 RFC https://www.rfc-editor.org/rfc/rfc6749#page-6他们只是说:

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

我发现了一个很好的图表云铸造网 http://blog.cloudfoundry.com/2012/10/09/securing-restful-web-services-with-oauth2/(与上面的 YouTube 视频相关)我用它来说明我的观点:

“令牌”提供商:例如,这可以/应该是 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)生成的访问令牌?我知道我需要在资源服务器上的某个位置有一个“令牌到用户”映射(数据库)。基本上我想设计我的 RESTful API,就像 PayPal 的 API 一样:

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

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

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


不知道如何用一个漂亮的鞠躬来回答所有问题,所以我只是提出以下几点:

  • 您是否试图以 OAuth 安全的方式使用像 Facebook 这样 OAuth 安全的 API?使用 Spring 社交。
  • 如果您尝试创建自己的 REST API 并使用自己的用户上下文,请使用 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 身份验证对象,然后使用 Spring Security OAuth 来保护对您的 API 的任何访问,这在turn 可能会在幕后安全地连接到 Facebook 的 API。客户端将使用您的 API 的 OAuth 访问令牌,而不是 Facebook。这将在服务中处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

验证来自 Spring RESTful 资源服务器的 OAuth 2.0 访问令牌 的相关文章

随机推荐