在基于角度的单页面应用程序上实现oauth2 auth的常用方法是什么? 是否可以在没有页面重新加载的情况下实现它?如果不是 - 将auth数据从页面传回角度代码的最佳方法是什么?
答案 0 :(得分:1)
授权服务器必须提供api来验证用户身份并返回访问令牌 ,不用 重定向。为了便于理解,我将在此示例中将facebook作为授权服务器和资源服务器。流程是这样的:
您的用户点击了页面上的按钮。
由于这是使用angularjs构建的SPA,浏览器会发送一个ajax 您的服务器以获取数据。
在服务器端,您会发现此操作需要来自的数据 资源服务器(facebook), 而不是重定向 浏览器 与我们通常做的资源服务器一样,服务器发送响应 具有自定义状态(或任何指示此操作的信息) 需要访问令牌到浏览器。
在浏览器中,当您收到来自ajax服务器的响应时 成功的回调函数。您可以查看响应并找出答案 此操作需要访问令牌
浏览器首先尝试从资源服务器获取此访问令牌 (如果用户已登录)。使用facebook时使用 FB javascript SDK,我们通常使用FB.getLoginStatus函数。
一个。如果我们可以在成功回调中获取访问令牌(用户是 已登录),只需将此访问令牌发送到服务器即可获取 数据(使用ajax)。
湾如果用户尚未登录,请使用javascript 通过呈现登录按钮提示用户登录,用户必须单击它。使用FB与facebook合作时 javascript SDK,我们通常在用户点击登录按钮时使用FB.login功能。后 成功登录后,我们将成功收到访问令牌 回调并将其发送到服务器以获取响应(使用 AJAX)。
没有页面重新加载,因为所有操作都是使用ajax完成的(没有浏览器的重定向)