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 服务就可以用于多个应用程序。
我在子域上有一个 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 服务就可以用于多个应用程序。