子域和oauth上的API

时间:2015-04-05 15:45:41

标签: angularjs api symfony oauth

我在子域名上有api:用symfony2编写的api.exemple.com和exemple.com上的主要应用程序(SPA - AngularJs)。

我想允许用户将他们的Facebook帐户与他们的本地帐户相关联。我不知道如何通过我的应用程序进行身份验证并使用第三方oauth提供商。

你有任何线索吗?

谢谢

1 个答案:

答案 0 :(得分:1)

在角度方面,首先打开一个新窗口,然后向你的oauth处理程序发送一个get请求:

self.oauthConnect = function(provider)
{
  var url = apiPrefix + '/oauth/tokens/'. provider;
  oauthWindow = $window.open(url,'_blank', 'height=600, width=600, top=100, left=300, modal=yes');
  oauthWindow.focus();
};

您的PHP api站点然后重定向到oauth提供商站点(即facebook)。我们使用新的客户端窗口,因此我们的SPA会继续运行,尽管重定向。然后,提供程序将显示其登录屏幕并使用oauth令牌信息重定向。

您的PHP api站点执行它所需的操作并生成实际的授权令牌(提示:使用json Web令牌)。然后该网站将html页面返回到您的角度应用程序。

<body>
  <script>
    window.opener.oauthCallback('<?php echo $oauthToken; ?>');
  </script>
</body>

然后将使用oauth标记调用您的角度控制器(打开窗口)。

$window.oauthCallback = function(oauthToken) 
{
  oauthWindow.close();
  oauthWindow = null;
  authManager.oauthToken = oauthToken;

  self.oauthSubmit();
};

容易对吗?好吧不是真的,但它确实有效。就我而言,我向右转,并且:

POST /auth/tokens/oauthToken 

获取真正的应用程序令牌。这样我的oauth服务就可以用于多个应用程序。