带有SPA + REST API的OAuth2

时间:2017-10-18 13:26:26

标签: rest spring-boot oauth oauth-2.0 spring-security-oauth2

让我们说我们有用Angular 2编写的SPA,并使用Spring Boot创建REST API。 它们都部署在不同的服务器上。现在我必须通过Facebook的OAuth2保护这个API,但我不知道哪种授权类型适合我的问题。

我不想成为auth服务器,我不希望facebook成为我的资源服务器,而我自己的REST API应该是资源服务器。 从FB我只想要用户名或电子邮件或一些标识符。

如果我理解正确,我必须使用隐式授权流程,因为它不是网络应用程序,请纠正我,如果我错了。 是"授权代码"补助也可以是一种选择吗?

我真的读过与oauth,spring security相关的几乎所有线程。 但我没有找到任何与单独服务器的SPA和REST API相关的信息。

感谢与上述问题相关的任何链接/资源。

提前致谢,如果我做错了事,我很抱歉,这是我在这里的第一篇文章。

1 个答案:

答案 0 :(得分:0)

您需要实现隐式授予流程https://oauth2.thephpleague.com/authorization-server/implicit-grant/

您需要HTTPS来确保安全。

示例:

将获取请求发送到带有参数的oauthserver“授权” URL

  • response_type =令牌(有时是“代码”)
  • redirect_uri = myclient.com或myclient.com/something(您在创建oauth客户端时分配给的那个人)
  • 客户端ID = dfuvhiurehvher(无论是哪个ID)

某些提供程序需要其他参数,例如“范围”。

如果一切正常,您发送请求时。您将使用url中的令牌将您重定向到您的客户端。

您的请求:

如果成功,您将被重定向到

您现在可以使用javascript检索令牌值并将其存储到localStorage,并在将请求发送到restapi(https://myrestapi.com)时将其附加

这是来自auth0.com的示例请求

  $.ajax({
    cache: false,
    url: "http://localhost:7001/api/appointments",
    headers: { "Authorization": "Bearer " + ATTACH_YOUR_TOKEN_VALUE_HERE }
  });

有关更多详细信息,请检查此 https://auth0.com/docs/api-auth/tutorials/implicit-grant