OAuth2授权我的Angular应用程序和我的REST API之间的交互?

时间:2014-05-27 15:13:37

标签: angularjs symfony oauth oauth-2.0

帮我为Angular App和我的REST API选择正确的OAuth2授权类型?

UX-wise我只想在我的前端使用一个登录表单,这将要求用户名/密码(没有对话框要求权限)。我认为"资源所有者(密码)授予"对我来说是最合适的(因为我控制前端和后端),但我不确定如何处理访问令牌刷新。

如果我对流程有误,请纠正我:

  • 当用户通过登录表单提交凭据时,将返回access token
  • 我可以将此令牌存储在LocalStorage中,以便随后发出Ajax请求。
  • 据我所知,access tokens应该是短暂的。并应使用Refresh token进行更新。首次登录后refresh token是否应该返回access token并存储在客户端?如果不是什么替代方案?
    • 是否应在服务器上维护任何会话以调用access token刷新?或者我应该从前端拨打电话,以便在它即将到期时刷新access token。但是我在前端需要一个refresh token,对吧?

如你所见,我的头脑里有refresh token。对另一项拨款实施有一些澄清或建议会很棒。


我认为后端技术在这里是无关紧要的,但以防万一它是带有FOSOAuthServerBundle的Symfony2。

1 个答案:

答案 0 :(得分:0)

当您在OAuth服务器上调用TOKEN端点(对于每个grant_type可能)时,您会获得access_token但其他信息(我认为这里有所有信息):

{
  access_token: // your short-lived token
  expires_in: // number of seconds before the access_token is invalid
  token_type: // the type of the access_token
  scope: // scopes of the access_token
  refresh_token: // long-lived token to get a new access_token
}

在我看来,您需要所有这些信息(可能范围未使用,但所有其他信息将在以后使用)。您必须存储access_token才能进行API调用。几秒钟后,您的access_token将不再起作用。你需要一个新的。您可以要求用户登录AGAIN或使用refresh_token。

您必须使用grant_type:refresh_token在TOKEN端点上调用OAuth服务器。您必须提供第一个请求中的refresh_token(以及其他信息),作为回报,您将获得与上述相同的响应。事实上,我认为每次access_token过期都必须这样做。在我看来,服务器端对会话或连接用户一无所知。它知道有效和无效的access_token。

这是OAuth。如果你不想每次都要刷新,你可以制作一个长期存在的access_token(通过设置expires_in),我认为这是在OAuth上下文中使sens变为唯一的解决方案。

您是否需要对OAuth进行一些澄清?