基于Angular.js + Node.js / PassportJS的SPA上的oauth2 auth

时间:2013-12-25 08:54:46

标签: javascript angularjs oauth-2.0 passport.js

在基于角度的单页面应用程序上实现oauth2 auth的常用方法是什么? 是否可以在没有页面重新加载的情况下实现它?如果不是 - 将auth数据从页面传回角度代码的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

授权服务器必须提供api来验证用户身份并返回访问令牌 ,不用 重定向。为了便于理解,我将在此示例中将facebook作为授权服务器和资源服务器。流程是这样的:

  1. 您的用户点击了页面上的按钮。

  2. 由于这是使用angularjs构建的SPA,浏览器会发送一个ajax 您的服务器以获取数据。

  3. 在服务器端,您会发现此操作需要来自的数据 资源服务器(facebook), 而不是重定向 浏览器 与我们通常做的资源服务器一样,服务器发送响应 具有自定义状态(或任何指示此操作的信息) 需要访问令牌到浏览器。

  4. 在浏览器中,当您收到来自ajax服务器的响应时 成功的回调函数。您可以查看响应并找出答案 此操作需要访问令牌

  5. 浏览器首先尝试从资源服务器获取此访问令牌 (如果用户已登录)。使用facebook时使用 FB javascript SDK,我们通常使用FB.getLoginStatus函数。

    一个。如果我们可以在成功回调中获取访问令牌(用户是 已登录),只需将此访问令牌发送到服务器即可获取 数据(使用ajax)。

    湾如果用户尚未登录,请使用javascript 通过呈现登录按钮提示用户登录,用户必须单击它。使用FB与facebook合作时 javascript SDK,我们通常在用户点击登录按钮时使用FB.login功能。后 成功登录后,我们将成功收到访问令牌 回调并将其发送到服务器以获取响应(使用 AJAX)。

  6. 没有页面重新加载,因为所有操作都是使用ajax完成的(没有浏览器的重定向)