2

我正在尝试使用OAuth 2.0对 Google 日历进行授权的Google App Engine 应用程序执行此操作(仅限于 Google Apps 域的用户)

  1. 如果用户尚未授权该应用访问他/她的日历,请显示“使用您的 Google Apps 帐户授权此应用”按钮。
  2. 当用户按下该按钮时,打开一个新窗口,授权过程从该窗口开始(网址格式为https://accounts.google.com/o/oauth2/auth?state=CALLER_URL&redirect_uri=CALLBACK_URL&response_type=code&client_id=CLIENT_ID&scope= https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar&access_type=offline )
  3. 用户授权应用程序访问他/她的日历,然后关闭此窗口并重新加载调用者窗口,以显示应用程序

第 1 步非常简单。第2步,有点。我可以在新窗口中打开该 url,但随后,该过程的其余部分将在该新窗口中进行。我的意思是:当用户授权应用程序时,url 回退到回调 uri 中,但在同一个窗口中,而不是在调用者 one中。

有没有办法做到这一点?我在更多的网站上看到过。您按下一个按钮,打开一个新窗口,授予调用者应用程序访问您的数据的权限(Twitter 帐户、Facebook 墙、Google 联系人......等等),然后关闭该窗口并重新加载调用者窗口,并使用所需的授权令牌并准备工作

4

1 回答 1

3

您肯定希望它回发到子窗口。这不是问题,因为父窗口和子窗口可以通信。例如:

  1. 一些JS打开子窗口并将其位置设置为谷歌授权页面
  2. 当用户接受对话框时,子窗口将被转发到您的回调 URL
  3. 您的服务器保存从转发 URL 获得的令牌数据(它不知道也不关心请求来自哪个窗口)
  4. 服务器返回一个页面,该页面被加载到子窗口中。
  5. 该页面是空白的,但包含一些 javascript 来提醒底层页面并关闭窗口

例如,javascript 可能如下所示:

window.parent.location.reload();
window.close();
于 2013-01-23T13:01:36.177 回答