API 在子域和 oauth 上

API on subdomain and oauth

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

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

你有什么线索吗?

谢谢

在 angular 端,首先打开一个新的 window 并向您的 oauth 处理程序发送一个获取请求:

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)。我们使用了一个新的客户端 window 所以我们的 SPA 保持 运行 尽管重定向。然后,提供商会显示他们的登录屏幕并使用 oauth 令牌信息进行重定向。

您的 PHP api 站点执行它需要的操作并生成实际的授权令牌(提示:使用 json 网络令牌)。该网站然后 returns 一个 html 页面返回到您的 angular 应用程序。

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

然后将使用 oauth 令牌调用您的 angular 控制器(打开 window)。

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

  self.oauthSubmit();
};

简单吧?好吧,不是真的,但它有效。在我的例子中,我右转并且:

POST /auth/tokens/oauthToken 

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